【図解】活性化関数とは?わかりやすく、そして深く解説

Last updated:

ニューラルネットワークを構成する重要な要素の一つ、「活性化関数」。近年では自然言語のモデルにもニューラルネットワークが頻繁に使用されており、活性化関数を理解することは必須になっています。

一方で、活性化関数について詳しく説明されているサイトはあまりありません。活性化関数をなんとなく知っているという方も「なぜ活性化関数が必要なのか?」と聞かれると困りませんか?

そこで今回は「活性化関数って何?そもそも活性関数はなぜ必要なのか?」という皆さんの疑問を解決していきます!活性化関数をわかりやすく、深く解説していきます!

図解で活性化関数をわかりやすく解説

ここでは、「活性化関数とは。ニューラルネットワークにおける役割」「一次関数と活性化関数でできている理由」「活性化関数の仕組みと具体例」についてイラストを使ってわかりやすく解説していきます!

活性化関数とは。ニューラルネットワークにおける役割

そもそも活性化関数とはなんなのか?について、数式を使わずに解説していきます。

活性化関数とは、一文で説明すると「ニューラルネットワークの隠れ層のニューロンを構成する要素の一つ。」です。

言葉だけだと難しく感じるかもしれませんが、下のイラストを見てみてください。

イラストの上部、ニューラルネットの図は見たことがある人も多いのではないでしょうか?このニューラルネットの隠れ層を構成している要素がニューロンです。さらにそのニューロンを構成する一部分が活性化関数なのです。 

次に「Σ」と「w」について超簡単に説明すると、これらは「一次関数」です。一次関数と言えば、中学で習った「y = ax+b」です。ざっくり説明すると、「ax+b(一次関数」と「活性化関数」でできているのがニューロンなのです。

つまり、ニューラルネットを構成するニューロンの一つ一つは「一次関数と活性化関数の組み合わせ」でできています。

ニューラルネットワーク、ディープラーニングと聞くと複雑そうなイメージを持っていると思います。しかし、一つ一つを見ていくと非常にシンプルな仕組み(関数)なのです。

ではなぜシンプルなのに、人間を超えるような高精度を実現しているのでしょうか?

それは「シンプルなニューロンを大量に組み合わせているから」です。つまり、シンプルなニューロンを大量に組み合わせることで複雑な関数を作り、高精度を実現しているのがディープラーニングと言えます。

そしてそのニューロンを構成している「一次関数と活性化関数」について、もう少し詳しく解説していきます。

一次関数と活性化関数で構成される理由

さて、ここまでで「ニューロンは一次関数と活性化関数の組み合わせ」ということがわかっていただけたと思います。では、なぜ活性化関数が必要なのでしょうか?一次関数だけではダメなのでしょうか?

この答えは、「一次関数は計算量が小さいという強みを持っているが、一次関数だけだとシンプルすぎるモデルしかできない」からです。一次関数は線形で、この線形を何度も掛け合わせても線形にしかならず、複雑な関数を作ることができません。そこに表現力を加えるのが活性化関数なのです(下イラスト)。

上のイラストを見るとわかるように、一次関数だけの場合は単純な関数しか作れず、複雑なデータに対応することができません。活性化関数と組み合わせることで、複雑な関数を作ることができるようになるのです。

Webプログラミングがわかる方であれば一次関数がHTML、活性化関数がCSSというイメージを持つとわかりやすいかもしれません。HTML(一次関数)だけだと、どう工夫してもシンプルすぎるものにしかなりませんよね。そこにCSS(活性化関数)を加えることで、必要とする複雑なものも作れるようになるのです。

実際に、活性化関数が必要な理由は「一次関数に表現力を与える」とよく説明されます。これもHTMLとCSSをイメージするとわかりやすいのではないでしょうか。

image from uwaterloo.ca

活性化関数の仕組みと具体例

活性化関数を使う理由がわかったところで、活性化関数の仕組みと良く使われる関数を見ていきましょう。

活性化関数の仕組みは基本的に、「入力(一次関数の計算結果)が、小さければ0に近い値、大きければ1に近い値」を出力します。

さっそく具体的な関数を見て確認していきましょう。

代表的な活性化関数「Logistic sigmoid関数」から、現在も使われている活性化関数「ReLU」までを網羅的に見ていきます。

ロジスティックシグモイド関数(SIGMOID)

graph by onl.bz/RWfWzWn

ロジスティックシグモイド関数は代表的な活性化関数です。自然言語のモデルでも使用され、RNNLMなどに使用されています。
*ロジスティックシグモイド関数は単に「シグモイド関数」と呼ばれることもあります。

グラフを見ると「入力が小さければ0、大きければ1に近い値を出力する」が行われていることがわかります。入力が-4以下であればほぼ0、4よりも大きければほぼ1を出力します。

ただ、シグモイド関数は実際のモデルではほとんど使われなくなりました。その理由は主に3つあり、それぞれを改善した関数が作られています。

 

POINT

①ゼロ中心ではない。(x=0の時、y=0.5)
→ハイパブリックタンジェント関数によって改善。

②勾配消失を引き起こす。
→ReLU関数によって改善。

③計算量が多い
→ReLU関数によって改善。

 

このように、ロジスティックシグモイド関数を改善した関数である、「ハイパブリックタンジェント関数」と「ReLU関数」についても解説していきます。

ハイパブリックタンジェント関数(TANH)

graph by onl.bz/RWfWzWn

前述しましたが、ハイパブリックタンジェント関数はロジスティックシグモイド関数の「0中心ではない」という欠点を改善しました。上のグラフを見ると、シグモイド関数が縦に拡張され0中心になっていることが分かります。

一方で、「勾配消失を引き起こす」と「計算量が多い」という問題点は改善されていません。これらの問題点も解決したのが「ReLU関数」です。

RELU関数

graph by onl.bz/RWfWzWn

ReLU関数は、勾配消失が起こらず、計算量が小さいという2つの点から現在でも広く使われています。特に畳み込みニューラルネットワークで広く使用されている活性化関数です。

「xが0以下であれば0、0より大きければその値を返す」という非常にシンプルな関数のため、計算量が非常に小さいのも大きな長所です。

ReLU関数が非常にシンプルなことに驚いた人も多いのでしょうか。感覚的には改善された関数ほど、複雑になっていきそうですよね。

活性化関数がシンプルな理由は「一つ一つのニューロンの計算量を小さくできれば全体の計算量を大きく軽減できるから」です。

前提としてニューラルネットワークには膨大な数のニューロンで構成されています。それの一つ一つが今回見る「一次関数と活性化関数の組み合わせ」でした。

この一つ一つの計算量が少しでも上がると、全体の計算量が膨大に増加します。そのため、計算量を抑えながら表現力を出すことができるReLU関数のようなシンプルなものが採用されているのです。

*実際には計算量が大きくなることを受け入れて、ReLU関数を若干複雑にしたLeaky ReLU関数などを使う場合もあります。

まとめ

  • ニューラルネットの最小単位、ニューロンは「一時関数と活性化関数の組み合わせ」。
  • 一次関数と活性化関数を組み合わせることで、小さい計算量で複雑な関数を作ることができる。
Sponsered Links