ニュース
2025/10/31 学校行事
IT・環境実習③ 「ディープラーニング」
今年度からIT・環境科の2年生が「IT・環境実習」の授業を受けています。
今回も引き続き「情報分野」の「Jetsonを用いた画像認識③」を取り上げていきます。
前回までの授業でAIの画像認識技術を一通り学んできました。
そして、ディープラーニングやその基であるニューラルネットワークこそがAI(人工知能)の核心であることが分かりました。
今回はそのディープラーニングについて実際に体感をしていきます。

あるデータを使って一定の分析結果を得る、ということをAIで行う場合、下記のステップを踏むことになります。
①データ収集(データの前処理 ノイズの除去などをする)
②モデル選定(アルゴリズムを選ぶ CNN・RNNなど ← これこそが「ニューラルネットワーク」)
③学習(モデルにデータを学習させる ← これこそが「ディープラーニング」)
④評価(適合率・再現率の検証)
⑤チューニング(データの増加・データ前処理の改善)
⑥実装(実際の環境にAIを組み込む)
ざっとですがこのような流れです。
前回の実習の時は③の「学習」をすでに終えたモデルを使って、④の「評価」を行いました。
今回の実習は、③の「学習」を実際に自分で行ってみて、学習させたデータセットに基づいたAI予測ができるかを学びます。
そもそも画像認識を行うためのプロセスは、一言でいってしまえば、
「認識対象の画像データをAIモデル(ニューラルネットワーク)へ入力し、計算を行い、何の画像か判断して出力する。」
ということです。
大まかには以下のようなイメージになります。
例えば、数字の「4」を認識するニューラルネットワークを作成するとします。
① 「正解」の数値の重みを定義する。以下は、「4」の例。

② 認識対象の入力データを準備する。以下は、数値「4」の例
実際に「認識対象の画像データ」を下のように数値化し、先の正解の「重みづけデータ」に重ね合わせます。

③ ①と②を組み合わせニューラルネットワークを作成する。
※ ①をニューラルネットワークの重みとして設定、②を入力ユニットに入力、計算して出力ユニットから予測した結果を出力する。

②の「入力した画像の数値」に①の「重みづけの数値」が掛け算され、さらには足し算がなされ、値が算出されます。
出力ユニットが10個あるのは「0」から「9」までの10個の数字を判別するためです。
なので①の重みづけが各数字ごとに8×8ピクセル分、つまり10×64=640個あることになります。
さらに、①と②で算出された値を「活性化関数」に入力をし、求めた積算値から確率値に補正して算出します。
活性化関数にはいくつか種類があります。
使用する活性化関数を変えることで、変換の方法が変わり、最終的な結果も変わってきます。「この問題にはこの活性化関数を使う」というのが、ある程度決まっています。
【回帰問題】
ある入力データから、(連続的な)数値の予測を行う問題
→ たとえば、猫の画像を見せてその画像から猫の身長や体重を予測 するような問題
⇒ 恒等関数など
【分類問題】
データがどのクラスに属するか、という問題
→ 例えば、猫の画像を見せたときにそれは猫か?犬か?を分類する ような問題
⇒ ソフトマックス関数など
ここでは画像(数字)が何であるのかという分類問題なので、「ソフトマックス関数」を使用します。
ソフトマックス関数とは、出力された多様な数字を全体の確率が100%(1.0)になるようにきれいに調整してくれる関数です。

まさに数学の世界ですね。
この活性化関数を通過して出力された値をもって、0から9までのどの数字であるのかを判別します。
例の場合、4の確率が一番高いかどうかということになります。
以上の例では、①の重みづけを人間が行っています。
かつてはそうでした。これを「機械学習」と呼んでいました。
ですが、現在のニューラルネットワークは、この重みづけの作業を自動で行うようになりました。ここがAIたる所以の部分です。
その技術の核心としては、「バックプロパゲーション(誤差逆伝播法)」です。
バックプロパゲーションは、ニューラルネットワークを効率的に学習させるためのアルゴリズムです。すなわち、予測結果と正解との誤差を計算し、その誤差をネットワークの各層に逆向きに伝播させて、ネットワークの重みを調整することで、モデルの精度を高めていきます。
例えば、まず順伝播で、「2」の画像を入力した時に、ネットワークが「これは3だ」と誤って予測したとします。次に、予測結果の「3」と正解の「2」との間に大きな誤差があることを計算します。そして、この大きな誤差をネットワークの各層に逆向きに伝えていきます。これが逆伝播です。伝わった誤差の情報に基づいて、モデルが「2」の特徴をより正確に捉えられるように各層の重みを調整し、パラメータが更新されます。
このプロセスを大量の画像データで繰り返すことで、モデルは最終的に数字の「2」を正しく認識できるようになります。
上記を難しい表現で書くと以下のようになります。
「正解値と予測値を元に誤差関数で求めた誤差に対する重みの偏微分で更新するべき方向(マイナス方向、プラス方向)を求め、重みの更新幅を最適化アルゴリズム(モメンタム、AdaGrad、RMSProp、Adam等)で計算して、徐々に誤差が最も少なくなる重みに更新していくという方法を取ります。」
このように「重み」を考え出すことをAIが自分で行うのです。ここが従来の機械学習と異なるところです。
今回の授業では「数字」ではなく、「ジャンケン」を認識するAIモデルの制作を行っていきます。
ジャンケンの手の形といっても、3種類あり、しかも画像的に一様ではありません。
これらを正確にグー・チョキ・パーとして判別するために、モデル(ニューラルネットワーク)に学習をさせていきます。


人間が重みづけをするのではなく、ニューラルネットワークが自律的に学習を何回も繰り返すことで重みを更新し精度を高めていく。
この仕掛けは、画像認識だけではなく音声認識や言語処理等の作業にも応用されています。
今回、「学習」すなわちディープラーニングを学びましたが、人間の脳の働きを0と1で再現する仕組みの根本はここにあるのかなと思いました。
画像認識に特化した特化型AIではなく、特定の作業に限定しない人間と同様の高い汎用能力をもつ汎用型AIを構築するには、膨大な計算量が必要になるはずです。
だから量子コンピューターなどの議論になるのでしょう。
あらためて人間の脳ってすごいなと感じました。
杉並工科高校はこのような内容の授業に触れることができます。
今でこそ人数が少ないですが、その分一人一人に時間をかけて手厚く指導することができます。難しい授業の内容ではありますが、十分生徒の皆さんもついていくことができるでしょう。
杉並工科高校は「全員が輝ける学校」を目指していきます!