活性化関数

活性化関数は、ニューラルネットワークの設計における重要な部分の1つです。モデルのパフォーマンスを向上させるには、これらの関数をよく理解する必要があります。

活性化関数は、入力を特定の範囲の出力に変換する数式です。

活性化関数は2か所で使用します。

  • 隠れ層で:ここに活性化関数を追加し、トレーニングデータをよく学習するための保険/制御モデル。
  • 出力層:モデル予測値のタイプに基づいて、ここで活性化関数を選択します。予測がkクラスの確率分布であるか、単一の値であるか。

隠れ層で使用できる活性化関数は次のとおりです。

シグモイド:ロジスティック関数とも呼ばれます。

def Sigmoid(input):
    """   
    :params input: any real value   
    :params    return : value in range of 0 to 1   
    """   
    return 1.0 / (1.0 + exp(-input))

      
sigmoid activation function. (Pic take from google)

勾配消失:深いニューラルネットワークの重みを更新するために、エラーを隠れ層にバックプロパゲーションします。また、ニューラルネットワークが深すぎて、Sigmoidやtanhなどの有界活性化関数を使用した場合、各隠れ層を逆伝播した後、エラーは劇的に減少します。したがって、初期のレイヤーでは、エラーはほぼゼロであり、このレイヤーの重みはそれほど更新されていません。この状態は勾配消失と呼ばれます。

あなたがそれを使うことができるところ

  • 境界領域への入力値を抑制します。そのため、勾配消失問題が防止されます(勾配の値が大きすぎます)。

def Relu(input):
    """   
    :paras: input: any real value   
    :params     return: real value
    """   
    return max(0, input)

      
ReLU Activation function. (Pic taken from google)

  • ReLUの導関数は、正の値の場合は1、負の値の場合は0です。
  • また、関数はx = 0で非微分であることがわかりますが、この時点では0であると安全に想定できます。
  • Sigmoidおよびtanhは、ゼロに近い値を返します(正確な値がゼロになることはありません)。ただし、Reluは真のゼロを返します(入力が負の場合)。このため、ゼロ値のニューロンを取得できます(これはスペア表現とも呼ばれます)。
  • 勾配消失問題(Sigmoidとtanhで確認できます)を解決するため、隠れ層で使用できます。
  • 最適化(直線性)が容易で、スムーズな流れが可能になります。ラベル付きデータで使用できます。
  • 死んだニューロンの問題:ニューロンが負の側でスタックすると、ニューロンは常に0を返します。学習率が高すぎる場合やバイアスが負の場合に大きい場合、このような問題に直面します。
  • 爆発勾配問題:爆発勾配は、勾配消失問題の正反対です。大きな勾配が蓄積されると、重みの更新が大きくなります。

def tanh(input):
    """   
    :paras: input: any real value   
    :params     return: value between -1 and 1   
    """   
    return (exp(input) - exp(-input)) / (exp(input) + exp(-input))

      
Tanh activation function. (Pic taken from google)

問題

  • 勾配消失。(シグモイド関数の説明を参照)
  • 境界領域への入力値を抑制します。そのため、勾配消失問題が防止されます(勾配の値が大きすぎます)。
  • tanhとSigmoidを比較する
  • tanhとsigmoidの派生(Googleから取得した写真)
  • この図から、tanhの勾配がシグモイド関数の勾配よりも大きいことがわかります(4倍大きい)。したがって、勾配が高いほど、重みが更新されます。強い勾配と大きな学習ステップが必要な場合に、シグモイドよりもtanh活性化関数を使用できる場合。
  • また、活性化関数としてtanh / sigmoidを使用すると、データが通常ゼロを中心としていることがわかります。
  • ニューラルネットワークは、ほとんどの場合、すべての隠れ層で同じ活性化関数を持ちます。
  • 隠れ層にtanhおよびSigmoid活性化関数を使用する場合は、「XavierNormal」または「XavierUniform」を使用して重みを初期化することをお勧めします。
  • 最新の深層学習アルゴリズムでは、デフォルトの活性化関数としてReLUを使用できます。

出力層としてのSoftmax

  • ベクトルを出力として返し、このベクトルに存在するすべての値の一部は正確にゼロです。(これは、Kが出力ベクトルのサイズであるK値の確率分布と見なすことができます)。
  • def softmax(input):
    	return exp(input) / exp(input).sum()
    

回帰:解決しようとしている問題が回帰問題であり、出力層にノードが1つしかない場合は、線形活性化関数を使用する必要があります。

二項分類:すべてのデータポイントが2つのクラスの1つに正確に属しているデータを検討してください。次に、私はバイナリ分類問題を解決していると言うことができます。また、出力層でノードを1つだけ使用している場合は、Sigmoid活性化関数を使用できます。二項分類の例:スパムと非スパムの分類

マルチクラス分類:バイナリ分類では、データポイントごとに2つの可能なクラスしかないことがわかります。しかし、2つ以上の可能なクラスがあり、各データポイントがこのクラスの1つに正確に属している場合、それをマルチクラス分類と呼びます。出力層にクラスごとに1つのノードが存在する場合は、ここでsoftmax活性化関数を使用できます。マルチクラス分類の例:データセットには2つ以上のクラスがあります(MNST桁データ)

マルチラベル分類:マルチラベル分類は単なるマルチクラス分類です。違いは、ここでは、データポイントが指定された出力クラスの複数または非に属することができるということです。出力層にクラスごとに1つのノードが存在する場合は、ここでシグモイド活性化関数を使用できます。例:トピックモデリングでは、単語は複数のトピックに属することができます。

より多くの活性化関数がありますが、これらは一般的なものです。

提案された投稿

安全な労働環境の構築

安全な労働環境の構築

「私が危険にさらされたとき、彼は私を守ってくれます。彼は私をテントの中に隠すでしょう。

脅威ハンティングのための OSINT の収集

脅威ハンティングのための OSINT の収集

サイバー愛好家の皆さん、こんにちは!OSINT for Threat Hunting シリーズへようこそ。最初の記事では、OSINT の概要と脅威ハンティングにおけるその重要性について説明しました。

関連記事

24 年度に炭素除去に資金を提供

経路全体にわたる Carbon180 の割り当てリクエストの内訳

24 年度に炭素除去に資金を提供

アリソン・リー著、マネージング政府問題顧問 連邦政府の年次歳出プロセスは、二酸化炭素除去 (CDR) に資金を提供する取り組みの中心です。毎年、Carbon180 は、来年の資金がどこに流れるかの指針となるよう、さまざまな議会事務所に要望書を提出しています。

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

新しいキャリアへの転職は、一人でやろうとすると非常に困難になる可能性があります。あなたと同じ学習レベルにあり、同様の目標、粘り強さ、意欲を共有する責任パートナーを見つけることが重要です。

その脅威アーカイブ: Vol 7 ブラックバスタ

その脅威アーカイブ: Vol 7 ブラックバスタ

今日の相互接続された世界では、サイバー攻撃の脅威がかつてないほど蔓延しています。サイバー犯罪者や国家主体は常に脆弱性を悪用して貴重なデータを盗もうとしており、あらゆる規模の組織に重大なリスクをもたらしています。

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

米国は、人種差別的な行動と善良な米国人であることを同一視しないという重要な一歩を踏み出すことができるだろうか?

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

[警告: このエッセイには、ジョーダン ニーリー殺害の犯人を賞賛する人々のスクリーンショットが含まれています。] 法執行当局はついに、そしておそらくはしぶしぶではありましたが、ジョーダン ニーリーを死ぬまで首を絞めた男、ダニエル ペニーをその殺人罪で起訴しました。