最初に
今回は、第二弾の記事でAIの学習手法を解説した際にちょろっと出てきた、DeepLearning(深層学習) について解説します
第二弾を読んでいない方はぜひ一度読んでから今回の記事を見るといいかもです
↓第二弾の記事はこちらから
ディープラーニングに関しては、深い所まで説明すると、数学知識が必須になってきてしまうため、後半はおまけ程度に読んでいただく形になるかもしれません
なるべく分かりやすいように、噛み砕いて説明していきます
そもそもDeepLearningってなんだ
機械学習とDeepLearningって何が違うの?
ここは勘違いしている方も多いと思うので整理していきます
まず言葉で説明するとDeepLearningはAIという大きな枠組の中に機械学習が存在し、その中に存在する学習手法の一つ
です
言葉だと理解が難しいので、画像で見てみます

画像の様になっており、ディープラーニングは平たく言えば学習手法なんだなということです
よく聞く 「AI=DeepLearning」 は厳密には間違いなので気をつけましょう
今回はそんなディープラーニングの中身をみていきます
ニューラルネットワークってなに
ニューラルネットワークは、人間の脳の神経細胞(ニューロン)を模倣したモデル構造のことを言います
このニューラルネットワークは、入力層、隠れ層(中間層)、出力層の各層に別れそれぞれ各ニューロンが相互に接続されてネットワークを構成しています
画像を見てみましょう、◯がニューロンを表しています

この画像のニューラルネットワークですが、入力層で1層、隠れ層で2層、出力層で1層の計4層構造となっていますが、この様に、隠れ層の数が増えて多層化された物をディープニューラルネットワーク(DNN) といい、このDNNを用いて精度向上を図る学習をディープラーニングと呼びます
ニューラルネットワークの層の数が3層の場合、ディープラーニングと呼ばないのかというとそういうわけでもなく、ディープラーニングとして呼ぶこともありますが厳密な定義は、隠れ層が複数層存在しているニューラルネットワークで学習することをディープラーニングと定義されていることが多いです
各層何をやっているのか
ではそれぞれの層がどの様な役割を持っているか解説します
■ 入力層
ここに学習するためのデータが入ります
入ってくるデータはすべて数値に変換して受け取ります
例えば:
■ 画像の場合
1ピクセルごとのRGB値(0〜255)
■ 文章の場合
単語を数値ベクトルに変換したもの
の様に、入ってきたデータを数値の配列として入力層で受け取ります
■ 隠れ層(中間層)
ここがニューラルネットワークにおける本体部分となります
隠れ層では、入力されたデータを組み合わせて、より抽象的な特徴を作って行きます
例:画像認識の場合
画像の隠れ層が3層あると仮定します。
最初の層ではエッジ(線)、色の変化
次の層では目の形、鼻の形
さらに深い層では顔,犬という概念
のように、徐々に抽象度を上げていきます
なんで「隠れ」層って言うのか
隠れ層の内部では、入力されたデータを学習過程で、抽象的な特徴に変換していきますが、この抽象化の作業において、どのような処理で行われているか数値的には分かるが、人間にとって直感的に理解が難しい処理が行われます
なので隠れ層と呼ばれることが多いです
■ 出力層
この層は最終的な予測結果を出力します
隠れ層で作られた特徴をもとに、最終的な判断を行います
例:
犬:80%、猫:20%
次に来る単語の候補
出力層は判断のまとめ役です
ニューラルネットワーク全体を一言で言うと、入力データを、何層にもわたって変換し続ける仕組み
そして重要なのは、
- 各層は「単純な計算」しかしていない
- しかしそれが何層も重なると、非常に複雑な表現ができる
という点があります
隠れ層が多くなると、
どの組み合わせが効いているのか
どの重みがどの判断に影響したのか
を人間が追うのは困難になります、隠れ層内でどのような判断を下したかを追うのが不可能に近くなります
これがディープラーニングの学習ブラックボックス問題に繋がります
(結構難しい)ニューラルネットワークはどんな仕組みで動いているのか
ここから難しいです、ディープラーニングの一番大事な所なのですが、ここでは統計学の知識が相当出てきます
ある程度の説明は加えていますが、初心者向けのため、出てくる単語の意味などはかなり省きます、参考情報を添付するので、ここに関しては自身で勉強して頂きながら読んでいただければと思います…(一から説明していたら記事の長さがとても長くなってしまうのでご了承ください)

画像は1つのニューロンの計算の中身を表しています
ディープラーニングはこの計算を、何万、何百万と繰り返していくことになります
①数式について
画像の下にある式
y=f(w1X1+w2X2+w3X3+b)
これがニューラルネットワークの最小単位の計算です
X₁, X₂, X₃(入力)
左側の◯から入ってくる値になります
例として、画像のピクセル値やテキストの単語ベクトルなどが全て数値として入ってきます
w₁, w₂, w₃(重み)
それぞれの入力にかかる重要度を表しています
- wが大きい→その入力は重要
- wが小さい→影響は小さい
- マイナス→逆方向に働く
ウェイトは学習中にAIが自動で判断して、調整しながら学習が進んでいきます
ウェイトは、モデルがどの特徴をどれだけ重視するかのパラメータになります
b(バイアス)
バイアスは 「ずらし」 になります
数学的には定数項ですが、直感的には判断基準の位置を調整するための値
と考えるといいかもしれません
例えば:
- 合格ラインを少し上げる
- 判定をやや厳しくする
そんな役割を持っています
f(活性化関数)
ここは重要です
まず活性化関数は
ニューラルネットワークに「非線形性」を与える関数
になります
そもそも非線形性というのはなんぞやという話になりますが、ここは「線形性、非線形性」の理解から必要になってきます
下記参照
簡単に要約すると、非線形性とは、出力されるグラフ(結果)を直線以外にする関数です
なぜディープラーニングで活性化関数が必要になってくるのか?
もし活性化関数が無かった場合、
y=w1X1+w2X2+w3X3+b
というただの線形計算になってしまい、何層計算を重ねても、出力がずっと直線のまま出力されてしまいます
直線の出力では、直線的な関係しか表現できません、しかし現実のデータは曲がっていたり、複雑に絡み合っていたり、単純な直線では分別が不可能なものばかりです
これら問題を解決するためにニューラルネットワークでは活性化関数を利用して曲線を描く力を与える必要があります
つまり、活性化関数が無ければ、どれだけ層を増やしても「深く」なりません
②計算の流れ
図に沿って計算の流れ簡単に説明します
Step1:入力が入る
X₁, X₂, X₃ が入る
Step2:重みをかける
各入力に w₁, w₂, w₃ を掛ける
Step3:全部足す + バイアスを足す
z=w1X1+w2X2+w3X3+b
Step4:活性化関数に通す
y=f(z)
ここまでが計算の一連の流れです
③これが学習
ディープラーニングにおける学習とは
重み w とバイアス b を調整すること
が目的です
- 1:予測する
- 2:正解と比べる
- 3:誤差を計算する
- 4重みを少し修正する
この誤差修正は、出力層から逆方向に伝播していきます(バックプロパゲーション)
そして、層の数が多層になることで
- 非常に複雑な境界
- 高次元の特徴抽出
- 抽象概念の学習
が可能になります
これがディープラーニングの強さです
まとめ
ここまでがディープラーニングのニューラルネットワークの説明になります
ここからディープラーニングでは、活性化関数の種類、勾配降下法など、手法やロジックの説明が必要になってきますが、今回の記事ではここまでとします
このディープラーニングについては、記事の量がかなりの量になる見込みなので、4-2の様に記事を分けて解説します
僕自身の勉強も必要なので、気長に更新をお待ち下さい
合間合間で社内リクエストや、別のタイトルの記事を書くかもしれません…
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。