活性化関数とは?意味・仕組みと関数の選び方に触れた論文(2026年11月時点)
活性化関数(かっせいかかんすう)
Activation function
活性化関数とは、ニューラルネットワークの各ニューロンが入力の重み付きの和を変換し、次の層へ渡すための関数のこと。直線では表せない込み入った関係を学べるようにする。
要するに
- 活性化関数がないと、層をいくつ重ねても全体は線形の計算のままになる
- ReLU は勾配消失問題の影響を受けにくく、計算も簡単で、まず試す関数とされる
- BERT は GELU を、PaLM と LLaMA は SwiGLU を活性化関数に使った
最終確認

活性化関数の選び方に触れた論文
- Batch Normalization 論文の解説:ミニバッチで学習を安定させるBatch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- DCGAN 論文の解説:画像生成で得た特徴の分類への転用Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
- BERTは「両側の文脈」をどう学んだか 2018年の原論文を読むBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- PaLM 論文の解説:規模拡大で改善したことと解決しなかったことPaLM: Scaling Language Modeling with Pathways
- LLaMA原論文を読む モデル規模と学習量をどう選んだかLLaMA: Open and Efficient Foundation Language Models
目次8
ひとことで言うと
活性化関数は、ニューラルネットワークの各ニューロンが、入力の重み付きの和を変換してから次の層へ渡すための関数だ。Google の機械学習の用語集は特徴とラベル(正解)の間の非線形な(込み入った)関係を、ニューラルネットワークが学べるようにする関数と定義している。
身近な例は迷惑メールの判定だ。Google の用語集はロジスティック回帰(確率を予測するモデル)の説明で、入力から計算した値をシグモイドという関数に通し、0から1の間の値に直す仕組みを示している。モデルが0.72を出せば、迷惑メールである確率を72%と見積もったことになる。シグモイドは、一部のニューラルネットワークで活性化関数としても使われる。
仕組み
Google の用語集の例で、1つのニューロンの中の流れを書くと次のようになる。
- 前の層から値を受け取り、それぞれに重み(学習で決める掛け算の数)を掛けて足し合わせる。入力が2、−1、3、重みが−1.3、0.6、0.4のとき、重み付きの和は−2.0になる。
- その和を活性化関数に通す。例でシグモイドを選んだ場合、−2.0は約0.12に変わる。
- 変換した値を次の層へ渡す。例では0.12を渡す。
変換が要る理由を、Google の講座「Machine Learning Crash Course」は次のように説明する。隠れ層を足すだけでは非線形な関係を表せない。線形の計算に線形の計算を重ねても、線形のままだからだ。CS231n(スタンフォード大学の画像認識の深層学習の講義)のノートも、活性化関数を抜くと2つの重みの行列が1つにまとまり、出力は入力の線形の関数に戻ると書いている。活性化関数がなければ、層をいくつ重ねても全体は線形の計算のままになる。
代表的な関数を、確かめた資料の範囲で並べると次のとおりだ。
| 関数 | 出力の範囲・形 | 使われる場面(資料に書かれた例) |
|---|---|---|
| シグモイド | 0〜1 | ロジスティック回帰の出力を確率に直す。CS231n は、最近はほとんど使われないと書く |
| tanh | −1〜1 | CS231n は、出力の中心が0なので、シグモイドより常に好まれると書く |
| ReLU | 入力が0以下なら0、正ならそのままの値 | Google の講座はまず ReLU から始めるよう勧める。Transformer の原論文も使った |
| Leaky ReLU | 入力が負の側にも、0.01ほどの小さな傾きを持つ | ReLU のニューロンが「死ぬ」問題への対策の1つ |
| GELU | 入力を、その値に応じて重みづけする | BERT が使った |
| SwiGLU | 2つの線形変換を掛け合わせ、片方を Swish という関数に通す | PaLM と LLaMA が使った |
| softmax | 各値が0〜1で、合計が1 | 多クラス分類(3種類以上に分ける問題)で、クラスごとの確率を出す |
GELU は、Hendrycks と Gimpel が2016年6月に arXiv に出した論文が提案した。要旨によると、ReLU は入力を符号(正か負か)で通すか止めるかを決める。GELU は入力をその値で重みづけする。ReLU や ELU と比べ、調べた画像、自然言語、音声の課題のすべてで性能が上がったという。
SwiGLU は、Shazeer が2020年2月の論文「GLU Variants Improve Transformer」で、Transformer の中の全結合の層(FFN)向けに試した型の1つだ。もとになった GLU(Gated Linear Unit)は、入力の2つの線形変換を要素ごとに掛け合わせ、片方を先にシグモイドに通す。SwiGLU はシグモイドの代わりに Swish を使う。重みの行列が2つから3つに増えるため、論文は隠れ層の大きさを3,072から2,048に減らし、パラメータの数と計算量をそろえて比べた。事前学習では GEGLU と SwiGLU がもっともよい値を出し、その後の言語理解の課題の多くでも GLU の型がもっともよかったという。
活性化関数の選び方は学習の進みやすさにも関わる。学習では誤差逆伝播法で勾配(傾き)を求め、勾配降下法で重みを動かす。CS231n のノートによると、シグモイドの出力が0か1の近くで飽和すると、そこでの勾配はほぼ0になる。逆伝播ではこの値が掛け合わされるので、勾配が小さいと、重みに届く信号がほとんどなくなる。
Batch Normalization の論文(2015年)は、シグモイドでは入力の絶対値が大きいほど勾配が0に近づくと書く。学習中にパラメータが変わると多くの値が飽和する範囲に入り、収束が遅くなる。この影響は、ディープラーニングのようにネットワークが深いほど大きくなるという。こうした勾配消失にはふつう ReLU、注意深い初期値の設定、小さい学習率で対処してきたという。
Google の講座は、ReLU は学習中の勾配消失問題の影響を受けにくいので、シグモイドや tanh のようななめらかな関数より、少しうまく働くことが多いと書く。計算もずっと簡単だという。CS231n のノートは Krizhevsky らの論文で ReLU を使うと、シグモイドや tanh と比べて SGD(確率的勾配降下法)の収束が6倍速くなった例を挙げている。
表で見る最新の状況
上の「活性化関数の選び方に触れた論文」は、TRAIL が解説した論文から、活性化関数の選び方に触れた5本を、発表の古い順に並べたものだ。確認日は2026年11月6日。
- Batch Normalization(2015年2月):層への入力の分布が学習中に変わり、飽和する非線形の関数を使うモデルの学習が難しくなる問題に、ミニバッチごとの正規化で取り組んだ。
- DCGAN(2015年11月):画像を作る生成器では ReLU を使い、出力層だけを tanh にした。本物か偽物かを見分ける識別器では、すべての層に LeakyReLU を使った。論文は、出力の範囲が限られた関数にすると、学習用の画像の色の範囲を早く覆えたと書く。
- BERT(2018年10月):OpenAI の GPT にならい、標準の ReLU の代わりに GELU を使った。
- PaLM(2022年4月):標準の Transformer に手を加えた点の1つとして、全結合の層(MLP)の中間の活性化に SwiGLU を使った。標準の ReLU、GELU、Swish より質が大きく上がると、Shazeer の論文が示したことを理由に挙げる。
- LLaMA(2023年2月):ReLU を、Shazeer が性能を上げるために示した SwiGLU に置き換えた。論文は、この変更の着想を PaLM から得たとしている。次元は PaLM の 4d ではなく、4d の3分の2にした。
TRAIL が選んだ5本では、2022年の PaLM と2023年の LLaMA がどちらも、Shazeer が2020年に示した SwiGLU を採用している。
活性化関数と softmax の違い
| 隠れ層の活性化関数(ReLU など) | softmax | |
|---|---|---|
| 何をするか | 1つの数を受け取り、決まった計算で1つの値に変える | 出力の値の並び全体を、クラスごとの確率に変える |
| 出力 | 関数による(ReLU は0以上) | 各値が0〜1で、合計が1 |
| 使う場面 | 隠れ層の各ニューロン | 多クラス分類で、出力をクラスごとの確率に直すとき |
| PyTorch の部品 | nn.ReLU、nn.GELU など | nn.Softmax |
Google の用語集によると、softmax は多クラス分類のモデルで、ありうるクラスごとの確率を決める関数だ。確率の合計はちょうど1.0になる。用語集の例では、画像が犬である確率を0.85、猫を0.13、馬を0.02と配分している。PyTorch のドキュメントは Softmax を活性化関数の一覧のうち「Non-linear Activations (other)」に入れている。
CS231n のノートによると、出力層のニューロンには活性化関数を置かないことが多い。出力層の値は分類ではクラスごとの点数を表し、任意の実数の値をとるからだ。
仕事でどう関係するか
LLM の技術資料を読むとき
LLM(大規模言語モデル)の論文には、構造の変更点として活性化関数の名前が出てくる。LLaMA の論文はもとの Transformer からの主な変更点を3つ挙げ、その1つを「SwiGLU activation function」としている。Transformer の原論文の全結合の層は、2つの線形変換の間に ReLU を挟む形だった。関数の名前がわかれば、モデルのどの部分をもとの形から変えたのかを読み分けられる。
次の論文の「Architecture」の節から、もとの Transformer と比べて変えた点を表にしてください。
列は「変えた部分」「変更前」「変更後」「論文が挙げた理由」とし、論文に書かれていない欄は「記載なし」としてください。
(ここに節の本文を貼る)分類の結果を確率として使うとき
softmax の出力は合計が1になるので、クラスごとの確率として扱える。PyTorch(ニューラルネットワークを作るためのソフトウェア)で組むときは、損失の計算との組み合わせに気をつける。nn.CrossEntropyLoss の入力は、クラスごとの正規化していない値(logits)を想定している。値は一般に、正である必要も、合計が1である必要もない。nn.Softmax のドキュメントは、NLLLoss とはそのまま組み合わせられないので、代わりに LogSoftmax を使うよう書いている。LogSoftmax のほうが速く、数値の扱いもよいという。
自社で小さなモデルを学習させるとき
Google の講座はまず ReLU から始めるよう勧めている。CS231n のノートの結論も ReLU を使うことだ。学習率に気をつけ、「死んだ」ニューロンの割合を見るよう書いている。気になる場合は Leaky ReLU などを試し、シグモイドは使わない。tanh は試してもよいが、ReLU より劣ると考えておくという。
注意点と限界
ReLU のニューロンは学習中に「死ぬ」ことがある。CS231n のノートによると、大きな勾配で重みが更新されると、そのニューロンがどのデータでも働かなくなる。以後、そこを通る勾配はずっと0になる。学習率が高すぎると、ネットワークの40%ほどが死んでいることもあるという。
シグモイドを使うときは、重みの初期値にも気をつける。CS231n は、初めの重みが大きすぎると多くのニューロンが飽和し、ネットワークがほとんど学習しなくなると書く。
関数を変えて結果がよくなった理由は、説明されていないことがある。SwiGLU などを試した Shazeer の論文は結論で、なぜうまくいくのかの説明はしないと書いている。比較の結果には、ばらつきがあるとも述べる。論文が示す効果は、その論文が試したモデルと課題での結果だ。
よくある質問
ReLU がよく使われるのはなぜか
資料が挙げる理由は、勾配消失問題の影響を受けにくく、計算が簡単なことだ。Google の講座がこの2つを挙げている。CS231n のノートは、指数の計算が要らず、0を境に値を切るだけで実装できると説明している。
softmax も活性化関数なのか
活性化関数の一覧に入れる資料がある。PyTorch のドキュメントは Softmax を「Non-linear Activations (other)」に分類している。ただし、隠れ層の ReLU などと違い、値の並び全体から確率を出す。
言語のモデルではどの活性化関数が使われているのか
モデルごとに違い、それぞれの論文に書かれている。Transformer の原論文は全結合の層に ReLU を使った。BERT は GELU を、PaLM と LLaMA は SwiGLU を使った。
シグモイドはもう使われないのか
隠れ層ではあまり使われないが、確率を出す場面では使われる。CS231n のノートは、活性化関数としてのシグモイドは最近ではほとんど使われないと書く。Google の用語集はロジスティック回帰の出力を確率に直す用途を挙げている。
関連する用語
出典
- Neural networks: Activation functions(Machine Learning Crash Course)Google
- Machine Learning GlossaryGoogle
- CS231n: Neural Networks Part 1: Setting up the ArchitectureCS231n
- torch.nn(PyTorch 2.15 documentation)PyTorch
- GELU(PyTorch 2.15 documentation)PyTorch
- Softmax(PyTorch 2.15 documentation)PyTorch
- CrossEntropyLoss(PyTorch 2.15 documentation)PyTorch
- Gaussian Error Linear Units (GELUs)(arXiv:1606.08415)Dan Hendrycks、Kevin Gimpel
- GLU Variants Improve Transformer(arXiv:2002.05202v1)Noam Shazeer
- Attention Is All You Need(arXiv:1706.03762v7)Ashish Vaswani ほか
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift(arXiv:1502.03167v3)Sergey Ioffe ほか
- Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks(arXiv:1511.06434v2)Alec Radford ほか
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(arXiv:1810.04805v2)Jacob Devlin ほか
- PaLM: Scaling Language Modeling with Pathways(arXiv:2204.02311v1)Aakanksha Chowdhery ほか
- LLaMA: Open and Efficient Foundation Language Models(arXiv:2302.13971v1)Hugo Touvron ほか
- 公開
- 執筆
- TRAIL編集部(編集方針)