AIをもっと知ろう!深層学習とCNNの仕組みをハンズオンで解説!!

プロフィール画像

佐藤英丞

2024年12月05日

リンクをコピーXでシェアするfacebookでシェアする

この記事は「BEMA Lab Advent Calendar 2024Open in new tab」の5日目の記事です。

はじめに 

こんにちは。24新卒でメンバーズの佐藤英丞です!

「AIや深層学習を始めたいけれど、何から手をつければ良いかわからない方へ。本記事では、AIの基礎や深層学習の重要な技術である『CNN(畳み込みニューラルネットワーク)』を初心者にもわかりやすく解説します。

また、ローコードツールを使ったハンズオンを通じて、AIの仕組みを実際に体験できる方法も紹介します。本記事を通して、ノーコードツールに触れて理解を深めていきましょう。

AIとは?

AIという単語は耳にしますが、一体それが何なのかわからない人も多いのではないでしょうか。それもそのはずです。専門家の間でも意見が分かれていたり、学習の過程はブラックボックスなのが現状です。

つまり、AIについて学ぶということは自分でAIを定義できるようになるということです。

調べていくとAIができることやできないこと、仕組みなどについて理解ができてきたと気づきました。今後のAIの見方や視野が広がると思うのでご自身で調べてみることをオススメします。本記事では、深層学習に取り組む上で必要な用語の解説のみに限定しています。 

深層学習の概要:AIを支える技術

まず簡単にAIの種類について説明します。大きく4つに分かれており、AI・機械学習・深層学習・生成AIに分けられています。今回は深層学習(Deep Learning)について詳しく解説していきます。

人間の脳内にある神経細胞であるニューロンを人工ニューロンという数式で模したモデルを組み合わせてニューラルネットワークを形成します。その中でも中間層を多層化したモデルをディープニューラルネットワークといいます。Deep LearningはDNNやCNNなどを含む機械学習の分野の1つです。これまでのAIと異なる点は自動で特徴量を抽出できる点にあります。

人工ニューロン

複数の入力とバイアス、活性化関数・しきい値を元に1つの出力をします。もう少し詳しく説明をすると入力(x)には重み(ニューロンとニューロンの繋がりの強さ、ω)がかけられます。入力と重みの積にバイアスを足し合わせた総和を活性化関数で処理し、出力値を決定します。そして、出力値がしきい値を超える場合に値が出力されます。

ニューラルネットワーク

ノードを繋ぎ合わせて入力層・中間層(隠れ層)・出力層からなるモデルのことです。

この中間層を多層化(増やす)したものが深層学習になります。

特徴量

学習させるデータが持つ特徴を定量的な数値として表したものが特徴量です。機械学習までは人間が設計・設定をしていましたが前項でも記した通り、深層学習からはAI自身で特徴量を抽出できるようになったので、より的確な特徴量の設定が可能となり、精度の向上につながりました。

活性化関数

活性化関数は、ハンズオンで必要な知識となるので、実際にハンズオンを行う際には理解しておく必要があります。

入力された値を変換し出力値を決定するものが活性化関数です。活性関数に適しているものは学習パターンによって変わりますが、大体が非線形で微分可能な関数が求められています。単純なものであれば直線で分類ができるのですが、複雑な問題になってくると曲線である非線形の方が分類しやすいためです。活性化関数は種類がいくつかあるので簡単に主要なものを紹介していきます。(グラフは横軸が入力、縦軸が出力です。)

①ステップ関数

ステップ関数の処理は入力され値が0未満であれば0。0以上であれば1で値を出力する関数です。出力値は1か0なので例えば、本来0.05であるはずの値も1で出力されてしまうので情報の表現に不足があります。

②シグモイド関数

入力値を0.0から1.0の範囲の数値に変換して情報を出力する関数です。表現力がありそうで一見よさそうに見えますが、勾配消失(誤差逆伝播を行なった際に値がほぼ0になってしまい重みが更新されなくなってしまう状態)が引き起こされてしまうため、使用されなくなっています。

③tanh関数

シグモイド関数ににていますが、この関数は入力値を−1.0から1.0の値の数値に変換し出力する関数です。シグモイドと比べて勾配消失が起こりにくく活用されていましたが、ReLU関数の出現により、こちらも使われにくくなっていきました。

④ReLU関数

今もっとも使用されているのがReLU関数です。負の入力は0、0以上の入力はそのままの値を出力します。勾配消失を起こしにくく、計算コストが低いという特徴があります。

⑤softmax関数

分類問題(グループ分けの問題)の出力層で頻繁に使用されています。出力した値の総和は1になります。CNNは分類問題ですのでこちらの関数を主に使用します。

CNN(Convolution Neural Network)の仕組み:画像認識を支える技術

CNN(日本語では畳み込みニューラルネットワークなんて言ったりもします。)は主に画像認識に特化したAIモデルになります。CNNの学習を行うと画像データを自身で用意する場合に画像前処理が必要になります。画像処理の勉強もできるので一石二鳥です。

CNNの学習過程は、入力層・畳み込み層・プーリング層・全結合層・出力層の5つです。理解する上で重要になるのは畳み込み層(Convolution)・プーリング層(Pooling)・全結合層(Affine)の3つです。1つずつ理解していきましょう。

畳み込み層(Convolution)

畳み込みでは画像を特徴量で絞り込み、どんどん小さくしていきます。例えば下の図のように4×4ピクセルの画像があります。2×2のフィルターを用意しデータの値を計算します。

今回の場合ですと、1×1+0×4+0×0+1×5=6として1つ目の畳み込みが終わりました。これを1ピクセルずつずらして計算を行います。これを最後まで行うと図のように3×3の畳み込みが完成します。

プーリング層(Pooling)

プーリングにはMaxPoolingとAveragePoolingの2種類があります。畳み込み層で処理を終えた画像にMaxPoolingでは決めた範囲の最大値を、AveragePoolingでは決められた範囲の平均値を取り出して圧縮します。下の図は2×2のPoolingの際の処理の例です。枠の色をみていただけるとわかりやすいと思います。

全結合層(Affine)

何回か畳み込みとプーリングを行い、最後に2次元の特徴を全て1次元の特徴に直し、全てのノードを繋ぎ合わせるのが全結合層です。CNNの出力層は全結合層になります。

Neural Network Console - SonyでCNNに挑戦!!ハンズオン:Neural Network Consoleで学ぶAI構築!

ここまで読んでいただいた皆様、そろそろCNNを作りたくなってきたのではないでしょうか!!Sonyでは商用利用も可能で、個人開発なら無料で使えるNerural NetWork Consoleを公開しています。早速触っていきましょう!(クラウド版が2024年12月25日を持ってサービスが終了となりますが、Windows版は提供を継続。)

プロジェクトを開く

大体使い方がわかる方は、新しいプロジェクト(nnabla/Transformers)をクリックします。こちらはフレームワークの違いなのでお好きな方を選んでください。(nnablaはSONYが開発したフレームワークです。)※この場合は自身でデータセットの設定をすることが必要になります。

今回はサンプルの01_logstic_regression.sdcprojを開きます。こちらは開くと自動でデータセットもダウンロードできるので簡単に学習を行うことが可能です。

開くとこんな感じです。このまま学習することも可能です。

データセットの確認は右上のデータセットから行えます。

データセットは有名なものが多数ありますが、その中でも今回は手描き文字認識のMNISTを使用します。ご自身で設定可能ですのでぜひ調べていろんなデータセットを試してみてください。


次に学習の条件などを確認していきましょう。画面右上のコンフィグから学習回数やバッチサイズ(どのくらいまとめて学習させるか)などの設定をすることが可能です。


早速学習をしていきましょう。右上の実行ボタンを押すと学習が簡単にできます。

結果をグラフと数値の両方で表示してくれるので視覚的にも学習がわかりやすく楽しいです。

カスタマイズ

画面の左から関数名をクリックするとレイヤーが画面中央の作業スペースに追加されます。

これらを組み合わせて、CNNを作っていきます。レイヤーをクリックすると画面左下でレイヤーの値も変更することが可能です。(画像では畳み込み層→活性化関数→プーリング層を繰り返して最後に全結合層→ソフトマックス関数と繋げています。)

学習結果

簡単に作成してみた結果、見事に過学習を起こしています。過学習とは学習データに適応しすぎて、テストデータで結果が残せていない状態です。この過学習がAIの学習には付きまとう問題ですが、これを解消し、良い結果を叩き出すのが醍醐味です。

おわりに

今回の記事では、Deep Learning(深層学習)とCNN(畳み込みニューラルネットワーク)の基本的な仕組みについて解説し、Neural Network Consoleを使用したCNNの実装手順、Deep Learning・CNNの簡単な解説とNeural Network Console - SonyでCNNの実装について紹介させていただきました!

AIの基礎やその活用方法について理解が深まったのではないでしょうか?

AI技術の未来はまだ未知数ですが、これからの時代において、必ず役立つ瞬間が訪れるはずです!!

本記事をきっかけにコードを使ったAIモデルの構築に挑戦をしてみたり、AIについてさらに学びを深めていただけるととても嬉しいです。

CNNの次はRNN・LSTM・生成AIの順に学ぶと理解もしやすいと思います。書籍を購入したり、AI関連記事などを参考にぜひトライしてみてください。

参考書籍・サイト

この記事を書いた人

佐藤英丞
佐藤英丞
2024年にメンバーズに新卒で入社。AIが大好きで自分で構築しています。 現在はDSDに仮配属中で生成AI基盤構築チームに所属。猫や哲学とかも好きだったりします。
ページトップへ戻る