2024年5月19日日曜日

ReLU関数がよくわからない

 ニューラルネットワークの活性化関数にReLUってあるじゃないですか。あれがどうもよくわからんのです。

数学的な定義とか「正の値の微分が1なので勾配消失問題に強い」とかは知ってるんですけど、なぜこれを使うと精度が向上するのか、負の値を一律で0にすることがニューラルネットワーク上でどういう意味を持つのかがわかりません。

上でリンクを張ったWikipediaでは

2000年にHahnloseらによって強い生物学的動機と数学的正当化を持って、動的ネットワークへに導入された

とありますが、生物学的な動機ってなんだろう。。。

そしてPyTorchのseq2seqとAttentionのチュートリアルでは、デコーダーの単語埋め込み(ベクトル表現)に対してReLUを適用していますが、これって大丈夫なん?

ベクトル表現の負の値を0にしてしまうと別の単語が同じ表現になってしまったり、特に全ての要素が負の値で表現される単語があったら、ゼロベクトル(PADやUNKなどの特別な単語)として扱われたりするんじゃないかと。

まあ内部状態は刻々と変化するのでゼロベクトルが渡されたからといって毎回出力結果が同じになるわけじゃないですし、そうなることを織り込み済みで学習させているので問題ないという理屈なんでしょうか。

誰か詳しい人教えてください。生物学的動機についても。

0 件のコメント:

コメントを投稿