昨今AIの隆盛、発展は著しく、AIや機械学習というものに興味がある人も増えていることと思う。
もうすでに組みあがったAIモデルやAIサービスを利用するのも面白いのだが、なぜAIが成り立っているのか、どういう仕組みなのか興味はないだろうか。
AIツールはこれからどんどん新しいものが出て来て、人間はついていくのも難しくなっていくだろう。しかし、AI、機械学習の根っこの理論の部分は変わらない。だからこそ今こそ機械学習の理論を学ぶのには意味があると思っている。
またさらに、なるべく数学的な話から逃げずに記事にまとめて行く。
序論
パターン認識という学問分野は、計算機アルゴリズムを通じて、データの中の規則性を自動的に見つけ出し、さらにその規則性を使ってデータを異なるカテゴリに分類する、というようなデータ処理を行うことに関連している。
例えば手書き数字の認識では、人間であればある程度癖のある字であろうとその字が「4」であるならば、「4」であると認識できる。しかしこれを機械でやろうとするとなかなかどうして難しい
つまり、ベクトルxを入力として受け取り、それが「0」~「9」のうちのどの数字を表しているのか判定する機械(関数)を作ればいいように思うが、先に述べたように手書きの文字にはひとそれぞれの癖があり、 4という数字の書き方のルールは,厳密に定まっていないからである。無理にルールを教えようとしても,そのルールに当てはまらない「4」や, そのルールに当てはまってしまう「4でないもの」が沢山出てきてしまい, ルールと例外を果てしなく追加しなければならない。(これをルール数が発散すると表現する)
ここで用いるのが機械学習である。手書き数字の認識問題では教師あり学習という機械学習の一種を用いることが一般的で、
教師あり学習では訓練集合(training set)と呼ばれるラベル付けされたデータ、つまりこの手書き数字の分類の場合、それぞれのベクトルxに対してひとつひとつ人間が「0」~「9」のどれなのかをラベル付けされた大きな集合が必要だ。つまり訓練集合は、学習に使われるデータの集まりである。手書き数字の認識では、入力データが数字の画像、正解データがその画像に対応する数字となる。
各画像は、例えば28x28ピクセルで構成されているとする。これを1次元のベクトル(長さ784)に変換し、入力データとして用いる。訓練集合に含まれるすべての画像に対して同じ操作を行い、入力データの行列を作成する。行列の各行は1つの画像を表し、各列は画像の各ピクセルに対応する。
目標ベクトル(t)とは、入力データに対応する正解データである。手書き数字の認識では、どの数字が書かれているかを表す整数が目標ベクトルとなる。しかし、一般的には目標ベクトルを「one-hotエンコーディング」という形式に変換する。これは、目標ベクトルの長さを数字の種類数(この場合は10)にし、正解の数字に対応するインデックスのみ1に、他は0にする表現である。例えば、「3」は[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]となる。
one-hotエンコーディングを使う理由
one-hotエンコーディングは、カテゴリデータを表現するための一般的な手法である。これを用いる理由は、機械学習アルゴリズムにおいてカテゴリ間の距離や順序の関係を持たせず、独立した状態で扱うことができるためだ。各カテゴリを独立した次元で表現することにより、カテゴリ間の意味のない数値関係が学習に悪影響を与えることを防ぐことができる。
one-hotエンコーディングを用いなかった場合、例えば手書き数字認識で数字をそのまま整数として扱う場合、数字間に数値的な関係が生じる。例えば「1」と「2」の間の距離は1であり、「7」と「9」の間の距離も2であるが、これらの距離はカテゴリとしての手書き数字に対して意味がない。しかし、one-hotエンコーディングを用いないまま学習を行うと、機械学習アルゴリズムがこのような数値関係を学習してしまい、性能が低下する恐れがある。
また、one-hotエンコーディングを用いない場合、予測結果が連続値として扱われることになり、出力が整数であるべきカテゴリの予測値が、実際には小数や負数になることも考えられる。これは予測結果として不適切である。一方、one-hotエンコーディングを用いることで、出力が各カテゴリに属する確率として解釈でき、正確で理解しやすい予測結果を得ることができる。
このように、one-hotエンコーディングはカテゴリデータを適切に扱うために重要な役割を果たし、機械学習アルゴリズムの性能向上に寄与している。
そして、機械学習のアルゴリズムを用いて学習した結果、ある関数y(x)が得られる。ここで、xは入力データ(手書き数字画像など)、y(x)は入力データxに対する予測結果(予測される数字など)を表す。
関数y(x)は、学習によって得られたパターンや特徴を元に、入力データxに対応する出力ベクトル(one-hotエンコーディングされた正解ラベルなど)を生成する。言い換えると、関数y(x)は新たな手書き数字画像xを入力として受け取り、その画像がどの数字であるかを表すベクトルを出力する。このとき出力されるベクトルは目標ベクトルと符号化の仕方、つまり同じ形式で予測結果を出力する。
このy(x)を得る段階を訓練(training)または学習(learning)という。一旦モデルが学習されると、それがどの程度の精度で正解を返してくれるのか確かめる必要がある。
そこで、テスト集合(test set)と呼ばれる、ラベル付けされていない新しい数字画像の集合に対して検証を行う。訓練と異なる新たな事例を分類する能力のことを汎化(generalization)と呼ぶ。
実際にモデルを作成する際には入力変数を前処理(preprocessing)、つまり学習データをアルゴリズムに適した形式に変換・整理するプロセスを行う必要がある。前処理には、欠損値の補完、カテゴリデータの数値化、データの正規化・標準化、特徴量選択や抽出など、多岐にわたる手法が含まれる。前処理のことを特徴抽出(属性抽出:feature extraction)をと呼ぶこともある。
前処理の重要性は、以下の点にある。
- データ品質の向上: 欠損値や外れ値、ノイズの除去・補完により、データ品質が向上し、学習の精度が向上する。
- 学習効率の向上: 正規化・標準化により、データの尺度を統一し、学習効率が向上する。
- モデルの解釈性の向上: 特徴量選択や抽出により、重要な特徴量のみを用いて学習を行うことで、モデルの解釈性が向上する。
今回の手書き数字認識の場合の前処理は、以下のような手法が考えられる。勿論、新たなテストデータに対しても同様に施す。
- 画像の正規化: 画像のピクセル値を0から1の範囲にスケーリングすることで、学習効率が向上する。
- 画像の統一化:平行移動させたり、拡大縮小したりして、固定した箱に収まるようにする。
- 画像の平滑化: 画像にガウシアンフィルタなどの平滑化処理を適用することで、ノイズを除去し、データ品質が向上する。
これらの前処理を適切に行うことで、手書き数字認識の機械学習アルゴリズムの性能が向上し、高い精度で未知の手書き数字画像を識別することができるようになる。実際にデータサイエンスの分野ではAIモデルを構築する際に、この前処理の工程がモデルの精度を大きく左右するので、データサイエンティストやAIエンジニアの腕の見せ所である。
ガウシアンフィルタ
ガウシアンフィルタは、画像の平滑化やノイズ除去に使用されるフィルタである。ガウス関数(正規分布関数)を基にしたカーネルを用いて、画像の各ピクセルに対して畳み込み演算を行い、周囲のピクセル情報を考慮した新しいピクセル値を計算する。結果として、画像の細かなテクスチャやノイズが抑制され、平滑化された画像が得られる。
-
【画像処理】画像を滑らかに!ガウシアンフィルタの仕組みと計算式
画像処理の世界では、さまざまなフィルタが存在し、それぞれ特定の目的のために利用されている。 今回は、画像を滑らかにするガウシアンフィルタについて、その原理や計算式、実際に計算する際の具体的な流れを解説 ...
続きを見る
そもそも機械学習とは
出典:総務省
ここで一旦、機械学習に関わる単語を整理しておく。昨今のAIブームで単語自体は知っているけど違いが分からんという人も多いのではないのだろうか。
そもそも機械学習とは、コンピュータがデータや経験から自動的に学習し、パターンや知識を抽出し、その結果を用いて予測や判断を行う技術である。機械学習はAI(人工知能)の一部であり、AIの目標は人間の知能を模倣・再現し、コンピュータが自律的に問題解決ができるようにすることである。
ディープラーニングは、機械学習の一種であり、ニューラルネットワーク(人間の脳の神経細胞を模した構造)を多層に重ねたディープニューラルネットワークを用いて学習を行う手法である。画像認識や自然言語処理など、従来の機械学習手法では難しかったタスクにおいて高い性能を発揮することができる。
機械学習の手法は、大きく分けて「教師あり学習」、「教師なし学習」、「強化学習」の3つのタイプに分類される。
教師あり学習(supervised learning)
教師あり学習は、入力データ(入力ベクトルx)とそれに対応する正解ラベル(目標ベクトルt)を用いてモデルを学習させる方法である。主なタスクはクラス分類と回帰である。
クラス分類(classification)
入力ベクトルを有限個の離散カテゴリのどれに属するかを予測するタスク。例えば、猫と犬の画像を分類する場合、猫か犬かを予測したり、先ほどの手書き数字の認識などがある。
回帰(regression)
入力ベクトルに対応する連続値を予測するタスク。例えば、家の広さや立地から、その家の価格を予測したり、化学プラントにおける生成物の予測などがある。
教師なし学習(unsupervised learning)
教師なし学習は、入力ベクトルxだけを用いて、データの構造やパターンを発見する学習方法である。つまりは対応する目標値が存在しない。主なタスクはクラスタリング、密度推定、視覚化である。
クラスタリング(clustering)
データを類似性に基づいてグループに分けるタスク。例えば、顧客データを使って、顧客セグメントを分析する。
密度推定(density estimation)
データの分布を推定するタスク。例えば、不正利用の検出や外れ値検出などに応用される。
視覚化(visualization)
高次元データを低次元空間にマッピングして、データの構造を理解しやすくするタスク。
以下はt-SNEというアルゴリズムを使って、データから得られた特徴量を二次元に削減して可視化する例である。
強化学習(reinforcement learning)
強化学習は、ある状況下でエージェントが環境と相互作用しながら、報酬を最大化するような行動を学習する方法である。エージェントとは、行動する主体のことで、ロボットのようなものを想像するとわかりやすい。
エージェントは、何らかの環境に置かれ、環境の「状態」を観測しそれに基づき「行動」を行う。その結果として環境の状態が変化し、エージェントは環境から「報酬」を受け取ると同時に「新しい状態」を観測する。強化学習の目標は、エージェントが得る報酬の総和を最大にする行動パターンを身に着けるということである。
信頼度割り当て(credit assignment)
不確実性を考慮して行動を選択する方法。例えば、バンディット問題では複数のスロットマシンがあり、それぞれ異なる確率で報酬が得られる。エージェントは、どのスロットマシンを選ぶべきかを決定する。信頼度割り当てを用いることで、不確実性を考慮しながら最適なスロットマシンを選択できる。例えば、UCB(Upper Confidence Bound)アルゴリズムは、各スロットマシンの期待報酬に不確実性を加味した上限値を計算し、その上限値が最大となるスロットマシンを選択する。さらに例えば、将棋やオセロ、囲碁などのゲームにおいて勝利という報酬は最後に与えられるので、結局どの手が有効であったか判断するのが難しい。
探査(exploration)
未知の状況や行動を試すことで、環境についての知識を増やすプロセスである。新しい行動を試すことで、より良い報酬を得られる可能性がある。
例えば、迷路探索問題ではエージェントは迷路の中でゴールを目指す。未知の状況や行動を試すことで、迷路の構造を把握し、最適な経路を見つける。探査はε-greedy法やボルツマン探査法などの手法で行われる。ε-greedy法では、確率εでランダムな行動を選択し、確率1-εで現在の知識に基づいて最適な行動を選択する。
利用(exploitation)
既知の状況や行動に基づいて、最適な行動を選択するプロセスである。すでに得られた知識を活用して報酬を最大化する。
これらの概念やアプローチを組み合わせることで、機械学習アルゴリズムはさまざまなタスクを解決する能力を持っている。例えば、画像認識や自然言語処理では教師あり学習が主に用いられるが、データの前処理や特徴量選択では教師なし学習が役立つ。また、自動運転車やロボットの制御には、強化学習が適している。このように、各機械学習の種類が対応するタスクや問題に応じて適切に選択されることで、高い性能が実現される。因みにディープラーニングは教師あり学習、教師なし学習、強化学習のどれでも利用可能である。
そして、これらの方法はそれぞれに対して独自のツールやテクニック、知識が必要になるし、それぞれにさまざまなアプローチの方法があるものの、根本的な考え方は共通している。