Articles

ニューラルネットワークの理解2:3つの方程式におけるニューラルネットワークの数学

このシリーズの最初の部分では、ニューラルネットワークの概念と単一のニュー しかし、単一の層には多くのニューロンがあり、ネットワーク全体には多くの層があるので、ニューラルネットワークを記述する一般的な方程式を考え出す

単一ニューロン

ネットワークが最初に行う必要があるのは、層を介して情報を前方に渡すことです。 私たちはすでに単一のニューロンに対してこれを行う方法を知っています:

ニューロンの出力は、ニューロンの入力の重み付けされた合計の活性化関数です

2 ニューロン

これで、2番目の層に2つのニューロンがあるときに同じロジックを適用できます。

この例では、第1層の各ニューロンが第2層の各ニューロンに接続されており、このタイプのネットワークは、完全接続ネットワークと呼ばれる。 ニューロンY1は、重みW1 1およびW1 2を有するニューロンX1およびX2に接続され、ニューロンY2は、重みW2 1およびW2 2を有するニューロンX1およ この表記法では、重みの最初のインデックスは出力ニューロンを示し、第二のインデックスは入力ニューロンを示すので、例えばW12はX2からY1への接 これで、Y1とY2の方程式を書くことができます:

ここで、この方程式は行列乗算を使用して表すことができます。

からの行列乗算の可視化http://matrixmultiplication.xyz/

行列乗算と線形代数が初めてで、これが混乱する場合は、3blue1brown線形代数シリーズを強くお勧めします。

これで、最初のニューロンの出力をY1として、2番目のニューロンの出力をY2として書くことができます。 これにより、次の式が得られます:

whole layer

このことから、レイヤーの出力の一般的なルールを抽象化することができます:

この方程式では、すべての変数は行列であり、乗算記号は行列の乗算を表します。

式で行列を使用すると、簡単な形式で書くことができ、出力内の任意の数の入力とニューロンに対してtrueになります。

ニューラルネットワークのプログラミングでは、計算を並列にし、グラフィックカードのような効率的なハードウェアを使用できるようにするため、行列乗法も使用します。

今、私たちは、単一の層のための式を持っているが、何もこの層の出力を取り、次の層への入力としてそれを使用してから私たちを停止しません。 これはニューラルネットワークの各層の出力を記述する一般的な方程式を与える。 もう一つ、我々は追加する必要があり、活性化機能であり、私たちはシリーズの次の部分で活性化機能を必要とする理由を説明します、今のところ、あなたは

この式を使用すると、ニューラルネットワークの多くの層を介して情報を必要に応じて伝播することができます。 しかし、学習がなければ、ニューラルネットワークは単なるランダムな行列乗算のセットであり、何も意味しません。

だから、私たちのニューラルネットワークを教える方法? まず、ニューラルネットワークの誤差を計算し、この誤差をすべての層に渡す方法を考える必要があります。

2:エラーバック伝播を渡す

エラー伝播アルゴリズムを理解するには、最初の層に2つのニューロンと第二の層に1つのニューロンを持つ例に戻る必要があります。

Y層がネットワークの出力層であり、Y1ニューロンが何らかの値を返す必要があると仮定しましょう。 これで、この値は期待値とはかなり異なる可能性があるため、Y1ニューロンに多少の誤差があります。 このエラーは、戻り値と期待値の差と考えることができます。 私たちはy1のエラーを知っていますが、Y層だけでなく、すべての層に学習させたいので、このエラーをネットワークの下位層に渡す必要があります。 では、このエラーをX1とX2に渡すにはどうすればよいですか? まあ、素朴なアプローチは、y1エラーを均等に分割することです、X層に2つのニューロンがあるので、X1とX2エラーの両方がY1エラーに等しいと言うことができます2によって考案されました。

しかし、このアプローチには大きな問題があります—ニューロンはそれらに接続された異なる重みを持っています。 X1ニューロンに接続された重みがX2ニューロンに接続された重みよりもはるかに大きい場合、Y1=(X1*W11+X2*X12)であるため、Y1の誤差はX1によ したがって、W11がW12より大きい場合、これはそれに寄与するニューロンであるため、より多くのY1誤差をX1ニューロンに渡す必要があります。

これを観察したので、エラーを均等に分割するのではなく、入力ニューロンの重みと出力ニューロンに来るすべての重みの比率に従って分割するアルゴリ

重みを更新する

ここで、さらに一歩進んで、出力層に複数のニューロンがある例を分析することができます。

この例では、例えば、ニューロンX1はY1の誤差だけでなく、Y2の誤差にも寄与し、この誤差は依然としてその重みに比例することがわかります。 したがって、x1の誤差を記述する方程式では、Y1の誤差に重みの比を乗じたものと、Y2の誤差にY2に来る重みの比を乗じたものの両方を持つ

この方程式は、行列乗算の形で書くこともできます。

今、我々は関連する情報の多くを失うことなく、この引用を簡単にするために行うことができますもう一つのトリックがあります。 重量比の分母は、正規化因子として機能するので、我々はそれについてあまり気にしない、部分的に最終的な方程式は、我々はニューラルネットワークの学習を調

これはまた、私たちが作ることができるもう一つの観察です。 この式の重みを持つ行列は、フィードフォワードアルゴリズムの行列形式と非常によく似ていることがわかります。 違いは、行と列が切り替わることです。 代数学では、この行列の転置を呼び出します。

2つの異なる変数を使用する必要はないので、フィードフォワードアルゴリズムから同じ変数を使用することができます。 これにより、逆伝搬アルゴリズムの一般式が得られます

フィードフォワードアルゴリズムでは、最初の層を最後に形成していましたが、逆伝播では、ネットワークの最後の層を最初の層に形成しています。

:

1. 機械学習を物理的な絵画のインスピレーションとしてどのように使用したか

2. MSまたはスタートアップジョブ-深い学習でキャリアを構築するために行くためにどのように?

3. 人工知能に関連するメディア記事トップ100

4. Artificial Intelligence Conference

情報を前方に渡し、エラーを後方に渡す方法がわかったので、各レイヤーでエラーを使用して重みを更新できます。

3:重みの更新

各レイヤーでニューラルネットワークがどのようなエラーを出すかを知ったので、最終的に問題に対する最良の解決策を見つけるためにネッ

しかし、最良の解決策は何ですか?

エラーは私たちの解決策がどれほど間違っているかを知らせるので、当然のことながら最良の解決策はエラー関数が最小であるものになります。

誤差関数はネットワークの重みに依存するため、誤差関数のグローバル最小値になるような重み値を見つけたいと考えています。 この写真は視覚化目的のためだけのものであることに注意してください。 実際のアプリケーションでは、1つ以上の重みがあるため、誤差関数は高次元関数です。

しかし、どのようにこの関数の最小値を見つけるのですか? ここでの簡単なアイデアは、ランダムな重みから始めて、それらの重みの誤差関数を計算し、この関数の傾きをチェックして下り坂にすることです。

しかし、どのようにして関数の傾きを知ることができますか?

線形代数をもう一度使用し、与えられた点での関数の導関数がこの点での関数の傾きに等しいという事実を利用することができます。 この派生物は次のように書くことができます:

ここで、Eは誤差関数であり、Wは重みを表します。 この表記法は、重みに関する誤差関数の導関数を求めたいことを示しています。 重みWnが+1になった後のニューラルネットワークの表記出力では、エラーでn+1を使用します。

この導関数を使用して重みを更新できます:

これは、誤差関数の導関数の傾きに応じて重みを更新する各学習反復(エポック)を”下り坂に行く”ことを表します。

最後の方程式を提示する前にもう一つ必要なことがあり、それは学習率です。 学習率は私達が下り坂に行くことの間にいかに大きいステップを取っているか調整する。

あなたがより大きな学習率で見ることができるように、我々はより大きな一歩を踏みます。 これは私達が機能の最適により速く得てもいいが、私達がそれを逃すおろし金のチャンスがまたあることを意味する。

学習率が小さいほど、より小さなステップを実行するため、関数の最小値に達するためにはより多くのエポックが必要ですが、それを逃す可能性は少

そのため、実際には、前のステップに依存する学習率を使用することがよくあります。 一方向に進む傾向が強い場合は、より大きなステップ(より大きな学習率)を取ることができますが、方向が変わり続ける場合は、より良い最小値を探 しかし、私たちの例では、単純なアプローチを取り、固定学習率の値を使用しようとしています。 これは私達に次の等式を与える。

学習率(Lr)は、rage0—1の数値です。 それが小さいほど、重みの変化は小さくなります。 学習が1に近い場合。 導関数の完全な値を使用して重みを更新し、それが0に近い場合は、その一部のみを使用します。 これは、その名前が示すように、学習率が、ネットワークが単一の反復でどれだけ”学習”するかを調節することを意味します。

重みを更新することが、ニューラルネットワークで必要な最後の方程式でした。 これは、ネットワークの実際の学習と、ランダムな値の代わりに意味のある出力を与えるように教えるための方程式です。

フィードフォワード

逆伝播

コメントを残す

メールアドレスが公開されることはありません。