【DeepLearning】行列の積 ( アフィン変換 )

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

順伝播で行われる行列の積(アフィン変換)

行列の積(アフィン変換)は入力データと学習された重み行列の積を計算することで、出力を生成するための線形変換を行います。

変換手順は以下の通りです。

  1. 入力データを受ける:
    ニューラルネットワークの順伝播の最初のステップではネットワークへの入力データが与えられます。
    (この入力データは通常ベクトルまたは行列の形式)
  2. ニューロンと重み行列の積を計算:
    各ニューロンには学習された重み行列が割り当てられています。
    この重み行列はニューラルネットワークのパラメータとして学習中に最適化されます。
    入力データと重み行列の積は線形結合を表します。

    線形結合 = 入力データ × 重み + バイアス

  3. バイアスの加算:アフィン変換では各ニューロンにバイアス(オフセット)も追加されます。
    バイアスは入力データと重みの積に加算される定数です。
    (バイアスは各ニューロンが非線形性を持つための重要な役割を果たす)
  4. 活性化関数への入力:アフィン変換の結果は次に活性化関数(例:シグモイド、ReLUなど)への入力として使用されます。
    活性化関数はニューロンの出力を非線形に変換するために使用されます。

線形変換とは?

「線形変換」とは、入力データに対して行われる線形演算のことを指し、
入力データの各要素に対して重みをかけて足し合わせる操作になります。

出力 = 重み × 入力 + バイアス

 

非線形を要求するニューラルネットワークに「線形」を求める?

「線形」と「非線形」は対照的な言葉だと思っています。

線形変換は入力データに対して線形的な操作を行います。
(そのため線形変換だけでは非線形な関係を表現することはできません。)

線形変換の結果を「活性化関数」で処理して「非線形」に変換するのだそうです。

だったら最初から「非線形」にしておけばいいのではないですかね?

・・・実は最初から非線形で扱える関数があるようです。

例えば活性化関数にReLU関数を使った場合などが該当します。
ReLU関数は入力が負の場合には線形な振る舞いをし非負の場合には非線形な振る舞いをするため線形変換を行わずに非線形な表現が可能です。

まだよくわかっていない部分が多いのですが、線形変換と非線形な活性化関数の組み合わせが重要らしく、ニューラルネットワークは非線形な関数の表現力を高めつつ
学習能力を向上させることが成功への道なのだそうです。