
【エンジニアの道は果てしない】 AIが学習していること(難しい数式なし)
こんにちは。すうちです。
最近何かと目にするAIのニュース、皆さんはAIと聞いてどういうイメージをお持ちでしょうか。
AI技術を知る前は、私もSFのロボットのような万能な印象もありましたが、いざ勉強したり仕事で関わると思ってたイメージと違う部分もあるなと感じてます。
今回はAIの学習について、概念が伝わるような話を書きたいと思います。
最初に結論。AIの学習とは
Y=aX+b Y:出力 X:入力
におけるa, bをいい感じに調整することです。
はじめに
今回説明では、中学生の頃習った一次関数を使います。
一次関数は、y=ax+bの形でx/y軸に対しaは傾き、bは切片(X=0の値)です。a, bが固定の時、xを代入するとyの値が決まります。
例:a=2 b=1 x=4の時 Y=2*4+1=9

以下、動物の身長体重(特徴分布)を用いた分類の例です。
データは、動物図鑑/動物の大きさの比較を参考にしました。
2つの分布
データが少ない場合
以下、データの分布があるとします。
図2はハイエナ(緑)とクマ(茶)の身長体重のサンプルです。
この時、ハイエナとクマを区別する境界線を引くとしたら、どのような線を引くでしょうか。

例えば、図3の線1、2のような線が引けると思います。

この場合、線1でも2でもどちらでも良くみえます。また、境界線は他にも色んなパターンが引けそうです。
このとき線1,2のa, bは以下でした。
線1:y=-14x+1400(a=-14、b=1400)
線2:y=2.8x-140(a=2.8、b=-140)
データが増えると
前述の分布は、ハイエナとクマの身長体重のサンプル数3でした。もっと身体が大きいもの・小さいものもいるかもしれません。
図3はサンプル数30の分布です。

サンプル数3の時に引いた線1と2はどちらもダメそうです(両線とも一部のクマはハイエナと判定され最適でない)
仮に図4の分布がハイエナとクマの身長体重分布を網羅する場合、理想的な境界線は線3と言えそうです。
このとき線3のa, bは以下でした。
線3:y=1.75x(a=1.75、b=0)
なぜ多くのデータが必要なのか?
データ数が少ないと境界線a, bの値が複数あったり、少ない数では良かった条件がデータが増えると適切でないことがあります。
AIは事前の学習結果からデータを判定しますが、数が少ないと学習したa, bが最適化されず判定精度に影響します。これがAIが多くのデータを必要とする理由です(補足:少ないデータでも学習効率や判定精度を上げる研究や手法もありますが、データの数と質は重要です)。
先ほどの一次関数a, bの話に戻ると、最初の境界線(a, b)は(-14, 1400),(2.8, -140)でしたが、図4の結果から適正値(a, b)は(1.75, 0)でした。
このようにAIが学習しているのは、入力データの特徴からa, bを最適値に調整することです。
複数の分布(分類が増えた場合)
仮に判定対象の動物を増やしたい場合はどうでしょうか(図5)。
これも基本的な流れは同じで、各境界線(図6. A,B,C,D)で必要な複数のa, bを調整していくことになります。


AIが値を調整できる仕組み
コンピュータ(AI)は、基本的に0/1の数値しか理解できません。ではどうやって入力データからクマやライオンを判断できるのでしょうか。
前提条件
少し前提を補足します。y=ax+bは、AIの教科書ではY=WX+bの表記(Y:出力, X:入力, W:重み, b:バイアス)ですが、基本的な考えは同じです。入力Xは通常2次元や3次元の行列を示します。
また今回説明を省きますが、AIのネットワークは通常複数層で出力Yを活性化関数(次層の入力選別)fを通してY1=f(Y0=WX+b)…Yn=f(Yn-1)から最終結果を得ます。
例:動物5種類の分類
例えば、判定したい動物が5種類の場合、最終出力をクマ:0、ライオン:1、シマウマ:5などルールを決めます。
入力がライオンの場合出力1が正解。それ以外は不正解なので重みWを修正します。この流れが図7です。

このWの更新はバックプロパゲーションと呼ばれ、出力誤差と偏微分や誤差関数を利用し、さかのぼって各層のWを更新する方法です。
学習が進むとWが最適化され入力の期待値と一致するようになります(更に詳しく知りたい方は、こちらの記事(Microsoft)も参照)。
最後に
今回は2次元分布(身長、体重)をy=ax+bで分類する例でしたが、この条件であれば通常は数値計算や条件判定になると思います。
AIを使う場合、単純な計算では判定難しいもっと複雑なデータだったり、調整する値も数千単位が一般的です。
人によってAIに持つ印象は様々と思いますが、何か参考になれば幸いです。
最後まで読んで頂き、ありがとうございました。
いいなと思ったら応援しよう!
