生成AIは機械学習から始まる-その5:深層学習(Deep Learning)の登場

生成AIは機械学習から始まる-その5:深層学習(Deep Learning)の登場

「生成AIは機械学習から始まる」シリーズの第五回目です。

今回は、深層学習(Deep Learning)について、深層学習が登場した背景からニューラルネットワークについての基礎を解説しています。機械学習、AIの開発を行う上で、必要な基礎を機械学習・AI開発を目指すAIビギナー向けにご紹介しています。

第一回~四回までの記事を読んでいない方は、以下のリンクをクリックして、読んでみたください。

 第一回目:生成AIは機械学習から始まる:基礎から理解する技術の系譜と実装への道

 第二回目:生成AIは機械学習から始まる-その2:機械学習のアプローチ

 第三回目:生成AIは機械学習から始まる-その3:教師なし学習(Unsupervised Learning)

 第四回目:生成AIは機械学習から始まる-その4:強化学習Reinforcement Learning)

では、さっそくはじめていきましょう!

機械学習の発展:深層学習(Deep Learning)の登場

深層学習を理解するには、まずその土台となるニューラルネットワークの概念を理解する必要があります。

ニューラルネットワークは、人間の脳の神経回路からインスピレーションを得た計算モデルです。ただし、これは生物学的な脳の完全な再現ではなく、脳の情報処理メカニズムの一部を抽象化し、数学的にモデル化したものです。

生物学的ニューロンから人工ニューロンへ

人間の脳には約860億個のニューロン(神経細胞)があり、それぞれが数千から数万の他のニューロンと接続しています。

ニューロンは以下のように動作します。

  1. 入力の受信:複数のニューロンから信号を受け取る
  2. 統合:受け取った信号を統合して評価する
  3. 発火判定:統合された信号が一定の閾値を超えると「発火」して信号を送出
  4. 伝達:接続された他のニューロンへ信号を伝える

この仕組みを数学的にモデル化したのが人工ニューロン(パーセプトロン)です。

人工ニューロンの構造

人工ニューロンは、以下の要素から構成されます。

1. 入力(Inputs) 複数の入力値 x₁, x₂, x₃, … を受け取ります。画像認識なら各ピクセルの値、テキスト分析なら単語の特徴などです。

2. 重み(Weights) 各入力には重み w₁, w₂, w₃, … が付けられます。重みは、その入力の「重要度」を表します。大きな重みは「この入力は重要」、小さな重みは「この入力はあまり重要でない」ことを意味します。

3. バイアス(Bias) バイアス b は、ニューロンの発火しやすさを調整するパラメータです。これにより、すべての入力がゼロでも出力を調整できます。

4. 総和の計算 ニューロンは、重み付けされた入力の総和を計算します:

z = (w₁ × x₁) + (w₂ × x₂) + (w₃ × x₃) + ... + b

5. 活性化関数(Activation Function) 計算された総和 z を活性化関数に通して、最終的な出力を決定します。活性化関数は、ニューロンの「発火パターン」を決定する非線形関数です。

主な活性化関数

活性化関数というキーワードがでてきましたので、主な活性化関数を5つご紹介しておきます。

  • シグモイド関数:出力を0から1の範囲に圧縮。確率的な解釈が可能
  • tanh関数:出力を-1から1の範囲に圧縮。シグモイドより勾配が大きい
  • ReLU(Rectified Linear Unit):負の値は0に、正の値はそのまま。現代の深層学習で最も一般的
  • Leaky ReLU:負の値も小さな勾配を持たせたReLUの改良版
  • Softmax:複数の出力を確率分布に変換。分類問題の出力層で使用

活性化関数の重要性は、非線形性の導入にあります。

もし活性化関数がなければ、どれだけニューロンを重ねても線形変換の組み合わせに過ぎず、複雑なパターンを学習できないのです。

ニューラルネットワークの構造

次は、ニューラルネットワークの構造についてご紹介します。

ニューラルネットワークは、個々のニューロンを組み合わせて、層(Layer)を構成します。

典型的なニューラルネットワークは、「入力層」「隠れ層」「出力層」の3種類の層から構成されます。それぞれの層について詳しく見てみます。

1. 入力層(Input Layer)

データを受け取る最初の層です。各ニューロンは入力データの1つの特徴に対応します。

例えば、28×28ピクセルの手書き数字画像なら、784個(28×28)のニューロンが入力層に配置されます。

2. 隠れ層(Hidden Layer)

入力層と出力層の間にある層です。

「隠れ層」という名前は、外部から直接観測できないことに由来します。この層が実際の特徴抽出や表現学習を行います。

隠れ層が1つだけのネットワークを浅いニューラルネットワーク複数の隠れ層を持つネットワークを深層ニューラルネットワーク(深層学習:Deep Neural Network)と呼びます。

つまり、ネットワークの中核となる部分がこの隠れ層であり、入力された情報の特徴を抽出・変換します。

3. 出力層(Output Layer) 最終的な予測や分類結果を出力する層です。分類問題なら各クラスの確率、回帰問題なら予測値を出力します。

ニューラルネットワークの学習メカニズム

ニューラルネットワークの「学習」とは、適切な重みとバイアスを見つけるプロセスです。

これは以下の手順で行われます。

1. 順伝播(Forward Propagation)

入力データをネットワークに通して、現在の重みに基づいて予測を生成します。

情報の伝達(順伝播(Forward Propagation))について、少し補足をしておきます。

層と層の間は、各ニューロンが次の層のすべてのニューロンと結合している全結合(Fully Connected)の形で情報を伝達します(ただし、畳み込みニューラルネットワークなどの特殊な構造もあります)。

順伝搬のフローをみておきましょう。

  1. 入力層がデータを受け取る。
  2. データは、重みを介して次の隠れ層のニューロンへ渡される。
  3. 隠れ層のニューロンは、上記1.で説明した計算(重み付け、総和、活性化)を行い、結果を次の層へ出力する。
  4. この処理が最終的な出力層まで順番に進んでいき、ネットワークの最終的な予測結果が得られます。

この、入力から出力へと一方向に情報が流れていくプロセスを順伝播と呼ぶのです。

2. 損失の計算(Loss Calculation)

予測と正解の差を測定する損失関数(Loss Function)を計算します。

一般的な損失関数には、

  • 平均二乗誤差(MSE):回帰問題で使用
  • クロスエントロピー:分類問題で使用
  • カスタム損失関数:問題に応じて設計

損失関数の値が小さいほど、モデルの予測が正解に近いことを意味します。

3. 逆伝播(Backpropagation)

逆伝播は、損失を最小化するために各重みをどう調整すべきかを計算するアルゴリズムです。

逆伝播の核心は連鎖律(Chain Rule)です。

出力層から入力層に向かって、各層の重みが損失にどう影響するかを逆向きに計算していきます。これにより、すべての重みに対する「損失の勾配(Gradient)」、つまり「どの方向にどれだけ重みを変更すれば損失が減るか」を効率的に計算できます。

逆伝播は、機械学習における最も重要な発明の1つと言えるでしょう。

4. パラメータの更新(Parameter Update)

計算された勾配を使って、重みとバイアスを更新します。最も基本的な手法は確率的勾配降下法(Stochastic Gradient Descent, SGD)です。

 新しい重み = 古い重み - 学習率 × 勾配

学習率(Learning Rate)は、一度にどれだけ大きく重みを変更するかを制御する重要なハイパーパラメータです。

現代では、SGDの改良版であるAdamRMSpropAdaGradなどのオプティマイザが広く使われており、これらは学習率を動的に調整し、より効率的な学習を実現します。

Adam、RMSprop、AdaGradmについては、別の機会に詳しくご解説します。

5. 反復学習(Iteration)

このプロセスを、全データセットに対して何度も(通常、数十回から数百回)繰り返します。

データセット全体を1回学習することを1エポック(Epoch)と呼ぶので、覚えておきましょう。

ニューラルネットワークの表現力

ニューラルネットワークの驚くべき性質は、その普遍近似定理(Universal Approximation Theorem)です。

この定理は、十分な数のニューロンを持つ1層の隠れ層でも、任意の連続関数を任意の精度で近似できることを数学的に保証しています。

つまり、理論的には浅いニューラルネットワークでも、あらゆる関数を表現できるということです。

しかし、ここで重要な疑問が生じます。

それなら、なぜ「深層」学習が必要なのでしょうか?

その答えは、理論と実践の間にあるギャップにあります。

普遍近似定理は「理論的には可能」と言っていますが、「実際に実現可能か」とは別の問題な為に、いくつかのギャップが生まれることになります。

そのギャップについて、まとめてみます。

  1. 必要なニューロン数の爆発的増加
  2. 学習の効率性:最適な重みを見つける困難さ
  3. 汎化能力の低下:丸暗記の罠

1. 必要なニューロン数の爆発的増加

1層のニューラルネットワークで複雑な関数を近似しようとすると、必要なニューロンの数が指数関数的に増加してしまいます。

例えば、画像認識のような複雑なタスクを考えてみましょう。

猫と犬を区別するという一見シンプルな問題でも、考慮すべき特徴は膨大です。

毛並みのテクスチャ、耳の形状、目の配置、体のプロポーション、姿勢のバリエーション、照明条件、背景との関係など。これらすべてを1層で表現しようとすると、数億、場合によっては数兆個のニューロンが必要になることがあります。

これは理論的には可能でも、実際のコンピュータで扱うには現実的ではありません。メモリも計算時間も膨大になり、実用に耐えないのです。

2. 学習の効率性:最適な重みを見つける困難さ

仮に天文学的な数のニューロンを用意できたとしても、今度はそれらの重みを適切に学習することが極めて困難になります。

ニューロンの数が増えれば増えるほど、最適化すべきパラメータ(重み)の数も増えます。巨大な1層のネットワークでは、パラメータ空間が非常に複雑になり、勾配降下法などの最適化アルゴリズムが適切な解を見つけられなくなってしまいます。これは、暗闇の中で数億次元の空間を手探りで探索するようなもので、ほぼ不可能な作業です。

さらに、訓練に必要な時間も膨大になります。

数兆個のパラメータを持つ浅いネットワークを訓練するには、現実的な時間では終わらない可能性があります。

3. 汎化能力の低下:丸暗記の罠

巨大な1層のネットワークは、訓練データを「理解」するのではなく、単に「丸暗記」してしまう傾向があります。

人間に例えるなら、数学の問題を解く原理を理解せずに、すべての問題と答えのペアを丸暗記しようとするようなものです。これでは訓練データと完全に一致する問題は解けても、少しでも異なる新しい問題には対応できません。

機械学習では、これを過学習(Overfitting)と呼びます。

訓練データでは完璧な性能を示しても、未知のデータに対しては性能が著しく低下してしまうのです。

実用的なAIシステムには、見たことのないデータに対しても適切に対応する汎化能力が不可欠ですが、巨大な浅いネットワークはこの能力が低くなりがちです。

ざっくりと3つのギャップについて解説しましたが、凡そ、この3つが、「深層」化への動機となりました。

次回は「深層学習」の続き、多層化がもたらしたブレイクスルーについてご紹介したいと思います。

APPSWINGBYは、最先端の技術の活用と、お客様のビジネスに最適な形で実装する専門知識を有しております。AIの開発から、既存業務システムへの組み込み、システムアーキテクチャの再設計からソースコードに潜むセキュリティ脆弱性の改修の他、リファクタリング、リアーキテクチャ、DevOps環境の構築、ハイブリッドクラウド環境の構築、テクノロジーコンサルティングサービスなど提供しています。

貴社のセキュリティ対策等についてご相談されたい方は、お問い合わせフォームからお気軽にご連絡ください。システムの専門家が、貴社の課題解決をサポートいたします。

システム開発にお困りではありませんか?

この記事を書いた人
株式会社APPSWINGBY
株式会社APPSWINGBY マーケティング

APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。

ご支援業種

情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数

株式会社APPSWINGBY
株式会社APPSWINGBY マーケティング

APPSWINGBY(アップスイングバイ)は、アプリケーション開発事業を通して、お客様のビジネスの加速に貢献することを目指すITソリューションを提供する会社です。

ご支援業種

情報・通信、医療、製造、金融(銀行・証券・保険・決済)、メディア、流通・EC・運輸 など多数

監修
APPSWINGBY CTO川嶋秀一
株式会社APPSWINGBY  CTO 川嶋秀一

動画系スタートアップや東証プライム上場企業のR&D部門を経て、2019年5月より株式会社APPSWINGBY 取締役兼CTO。
Webシステム開発からアプリ開発、AI導入、リアーキテクチャ、リファクタリングプロジェクトまで幅広く携わる。
C, C++, C#, JavaScript, TypeScript, Go, Python, PHP, Java などに精通し、Vue.js, React, Angular, Flutterを活用した開発経験を持つ。
特にGoのシンプルさと高パフォーマンスを好み、マイクロサービス開発やリファクタリングに強みを持つ。
「レガシーと最新技術の橋渡し」をテーマに、エンジニアリングを通じて事業の成長を支えることに情熱を注いでいる。

APPSWINGBY CTO川嶋秀一
株式会社APPSWINGBY  CTO 川嶋秀一

動画系スタートアップや東証プライム上場企業のR&D部門を経て、2019年5月より株式会社APPSWINGBY 取締役兼CTO。
Webシステム開発からアプリ開発、AI導入、リアーキテクチャ、リファクタリングプロジェクトまで幅広く携わる。
C, C++, C#, JavaScript, TypeScript, Go, Python, PHP, Java などに精通し、Vue.js, React, Angular, Flutterを活用した開発経験を持つ。
特にGoのシンプルさと高パフォーマンスを好み、マイクロサービス開発やリファクタリングに強みを持つ。
「レガシーと最新技術の橋渡し」をテーマに、エンジニアリングを通じて事業の成長を支えることに情熱を注いでいる。