0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【今さらながらシリーズ・#3】大規模言語モデルの数学・フィードフォワードネットワーク

0
Last updated at Posted at 2026-02-27

はじめに

 今回も大規模言語モデルに関連する数学的要素を整理しようと思います。今回の内容はフィードフォワードネットワーク(Feed Forward Network・FFN)になります。

フィードフォワードネットワークとは?

 注意機構で出力された値に対して、非線形変換を適用することで、モデルの表現力を高めるのがフィードフォワードネットワークになります。
 前回説明した注意機構の大部分は線形変換により構成されており、FFNでの非線形変換により柔軟に複雑なパターンをとらえることができるようになります。

1. 線形変換と非線形変換

 さて、ここまでで線形変換や非線形変換という言葉が出てきましたが、簡単にこれらの言葉について言及しておきます。
 線形変換は以下の性質を同時に満たすものを指し、いずれかを満たさないものが非線形変換になります。

  • 加法性(そのまま足し算できる)
\displaylines{
f(x+y)=f(x)+f(y)
}
  • 同次性(スケールが保たれる)
\displaylines{
f(ax)=af(x) \\
a:スカラー値
}

 非線形変換を導入するのは、線形変換のような直線的な関係では捉えられない複雑なパターンを捉えるためです。
 大規模言語モデルの場合、「文章から感情を理解する」、「次の単語を予測する」等のタスクのように複雑な関係を捉えるために導入するのが、今回説明するフィードフォワードネットワークになります。

2. フィードフォワードネットワークと数学

 フィールドフォワードネットワークは以下のように定義されています。

\displaylines{
FFN(x)=W_2・\sigma(W_1x+b_1)+b_2
}
記号 意味
${x\in{R^{d_{model}}}}$ 入力トークンの埋め込みベクトル
${W_1\in{R^{d_{ff}\times d_{model}}}}$ 1層目の重み
${W_2\in{R^{d_{model}\times d_{ff}}}}$ 2層目の重み
${b_1, b_2}$ 学習済のバイアス
${\sigma}$ 非線形変換である活性化関数
${d_{ff}}$ 中間層の次元(通常モデルの次元の4倍)

 この式は以下のように構成されています。

(1)1回目の線形変換

\displaylines{
W_1x+b_1
}

 自己注意機構で得られた結果を線形変換により次元を大きくすることで表現できる特徴の種類を増やします(=情報を広げます)。
 ここで得られた次元を中間次元といいます。

(2)非線形変換

\displaylines{
\sigma(W_1x+b_1)
}

 (1)で得られた情報を非線形変換することで、自己注意機構で捉えきれない特徴を補完できるようになります。

(3)2回目の線形変換

\displaylines{
FFN(x)=W_2・\sigma(W_1x+b_1)+b_2
}

 非線形変換した結果を元の次元に戻し、情報を圧縮します。

3. フィードフォワードネットワークで採用されている活性化関数

(1)ReLU(Rectified Linear Unit)

 例の原論文で採用されているものです。

\displaylines{
\sigma=max(0, x)
}

 採用の理由として、

  • 計算が非常に軽い
  • 勾配消失が起きにくい
  • 当時の大規模言語モデルでの安定性が高かった
    というのがあげられます。

(2)GELU(Gaussian Error Linear Unit)

 BERTやGPT-2/3といった言語モデルで採用されている活性化関数です。

\displaylines{
\sigma=x\phi(x)
}

 採用している理由は

  • 入力値の大きさに応じてどのくらい活性化するかを確率によって調整できる
  • ReLUよりも表現力が高い
  • 勾配が滑らかであるため、学習が安定する
    ためです。

(3)SwiGLU(Swish-Gated Linear Unit)

 PaLMやLLaMa、GPT-4で採用されている活性化関数です。
 これはSwishの滑らかな勾配とGLUの持つ必要な情報を調整する機能を採用した関数です。

\displaylines{
Swish(x)=x\sigma(x)=x・\frac{1}{1+\exp(-s)}\\
\sigma(x)はシグモイド関数\\\\
FFN_{SwiGLU}(x)=(Swish(xW_1))\bigodot{xW_3})W_2\\
\bigodotはアダマール積
}

採用理由として、

  • GELUよりも柔軟に特徴を選択・抑制でき、高い表現力をもつ
  • 勾配が途切れにくく、学習が安定する
  • GELUと比べパラメータ効率が良い(=中間次元が小さくなっても、性能は同等以上である)
  • ReLUやGELUよりも自然言語の曖昧な特徴を捉えることができる
    ということがあげられます。

最後に

 前回・今回と数学的な要素を含めながら大規模言語モデルで重要な要素を説明しました。こういった仕組みにより、人間が普段するような言語生成をすることがわかりました。
 今後、番外編として言語の数値化について更に深堀しようと思います。

参考文献

Ashish Vaswani et al. (2017) "Attention Is All You Need" NeurIPS 2017

参考リンク

今さらながらシリーズの記事

#1. 大規模言語モデルの仕組みを学んでみた
#2. 大規模言語モデルの数学・注意機構
#3. 大規模言語モデルの数学・フィードフォワードネットワーク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?