機械学習。ニューラルネットワーク(パート1):パーセプトロン学習プロセス

パーセプトロンがどのように学習するかを知っている人は、この記事で新しいことをほとんど見つけることができないことに事前に注意したいと思います。安全にスキップできます。これを書くことにした理由-ニューラルネットワークとTensorFlow.jsの使用に関連する一連の記事を書きたいので、一般的な理論的抜粋を省略することはできませんでした。ですから、最終的なアイデアは、忍耐と理解をもって扱っていただきたいと思います。



古典的なプログラミングでは、開発者は特定のプログラミング言語で特定の厳密に指定されたルールのセットを記述します。これは特定の主題分野での知識に基づいて決定され、最初の概算として、同様の問題を解決するときに人間の脳で発生するプロセスを記述します。



たとえば、tic-tac-toe、chessなどを再生するための戦略をプログラムできます(図1)。





図1-問題を解決するための古典的なアプローチ



一方、機械学習アルゴリズムは、開発者の参加なしに問題を解決するための一連のルールを定義できますが、トレーニングデータセットの可用性にのみ基づいています。

トレーニングセットは、期待される結果(応答、出力)のセットに関連付けられた入力のセットの一種です。トレーニングの各ステップで、モデルは内部状態を変更することにより、モデルの実際の出力と期待される結果の間のエラーを最適化および削減します(図2)。





図2-機械学習



ニューラルネットワーク



長い間、私たちの脳で起こっているプロセスに触発された科学者たちは、中枢神経系をリバースエンジニアリングし、人間の脳の働きを模倣しようとしました。このおかげで、機械学習の全体的な方向性、つまりニューラルネットワークが生まれました。



図3では、生物学的ニューロンの設計と、機械学習で使用されるニューロンの数学的表現との類似点を確認できます。





図3-ニューロンの数学的表現



生物学的ニューロンでは、ニューロンは樹状突起から電気信号を受信し、さまざまな強度の電気信号を変調します。これにより、特定のしきい値に達するとニューロンが興奮し、シナプスを介して他のニューロンに電気信号が送信されます。



パーセプトロン



2つの連続した操作を実行する1つのニューロンで構成されるニューラルネットワークの数学モデル(図4):



  • 接続の重み(コンダクタンスまたは抵抗)を考慮して、入力信号の合計を計算します

    sum= XTW+B=i=1nxiwi+b

  • 入力信号の合計にアクティベーション機能を適用します。

    out=φ(sum)







図4-パーセプトロンの数学モデル



任意の微分可能な関数をアクティベーション関数として使用できます。最も一般的に使用されるものを表1に示します。アクティベーション関数の選択はエンジニアの肩にかかっています。通常、この選択は、同様の問題を解決する既存の経験に基づいているか、または単に方法によって行われます。選択。

ノート



ただし、ニューラルネットワークで非線形性が必要な場合は、ReLU関数がアクティブ化関数として最適であり、トレーニングプロセス中にモデルの収束率が最も高くなることが推奨されます。

表1-一般的なアクティベーション機能
Linear function

φ(x)=x

.

Sigmoid function

φ(x)=11+ex



Softmax function

φ(xj)=exjiexi

φ([1.20.90.4])=[0.460.340.20]



( 2)

Hyperbolic Tangent function

φ(x)=exexexex





[-1, 1]. , ,

Rectified Linear Unit (ReLU)

φ(x)=max(0,x)





, , sigmoid tanh

Leaky ReLU

φ(x)=max(0.01x,x)





ReLU , 0





パーセプトロン学習プロセス



学習プロセスはいくつかのステップで構成されています。より明確にするために、線形活性化関数を持つ1つのニューロン(これは本質的に活性化関数のない知覚器です)で構成されるニューラルネットワークで解決する特定の架空の問題を検討し、タスクを単純化するために、ニューロン内の変位ノードbを除外します(図5)。 ..。





図5-トレーニングデータセットとトレーニングの前のステップでのニューラルネットワークの状態



この段階では、モデルのトレーニングの前のステージで計算された特定の接続の重みを持つ特定の状態のニューラルネットワークがあります。これがトレーニングの最初の反復である場合は、接続の重みの値がで選択されます。順不同。



したがって、トレーニングデータのセットがあると想像してみましょう。セットの各要素の値は、2つのパラメーター(機能)を含む入力データ(入力データ)のベクトルで表されます。 x1,x2..。x1,x2モデルでは、検討中の対象領域に応じて、家の部屋の数、海からの家の距離、または論理演算ANDまたはORのニューラルネットワークをトレーニングしようとしているだけで、何でも暗示できます。



トレーニングセットの各入力ベクトルは、期待される出力ベクトルにマップされます。この場合、出力データベクトルにはパラメータが1つだけ含まれます。これも、選択したサブジェクトエリアに応じて、家の価格、論理ANDまたはOR演算の実行結果などを意味します。



ステップ1-フィードフォワードプロセス

このステップでは、各結合の重みを考慮して入力信号の合計を計算し、アクティブ化関数を適用します(この場合、アクティブ化関数はありません)。トレーニングセットの最初の要素の計算を行いましょう。

ypredicted=i=1nxiwi=10.1+0.50.2=0.2







図6-エラーの順方向伝播



上記の式は、テンソル操作の特殊なケースの簡略化された数式であることに注意してください。



テンソルは基本的に、N個の軸と各軸に沿って任意の数の要素を持つことができるデータコンテナです。ほとんどのテンサーは数学に精通しています-ベクトル(1軸のテンサー)、行列(2軸のテンサー-行、列)。

式は次の形式で記述できます。ここでは、おなじみの行列(テンサー)とその乗算が表示され、上記で説明した単純化の種類も理解できます。



Ypredicted= XTW=[x1x2]T[w1w2]=[x1x2][w1w2]=[x1w1+x2w2]





ステップ2-エラー

関数を計算するエラー関数は、期待される出力と受信される出力の間の不一致を反映するメトリックです。次のエラー関数が一般的に使用されます:

-平均二乗エラー(MSE) -このエラー関数は、実際の値と期待値の差の2乗を使用するため、トレーニングセットの外れ値に特に敏感です(外れ値は、他の値から遠く離れた値です)データセット。データの測定単位が異なる、センサーの読み取り値が低いなど、データエラーが原因で表示されることがあります):

L=1Ni=1N(ypredicted(i)yexpected(i))2



-ルート平均二乗偏差(ルートMSE) -実際、これはニューラルネットワークのコンテキストでのルート平均二乗誤差と同じですが、実際の物理的な測定単位を反映できます。たとえば、ニューラルネットワークで、ニューラルネットワークの出力パラメータが家の価格(ドル)の場合、測定単位は平均二乗誤差は二乗ドルになります($2)、そして標準偏差の場合、それはドル($)であり、これは当然、人間の分析のタスクをわずかに単純化します。



L=1Ni=1N(ypredicted(i)yexpected(i))2



-平均偏差(平均絶対誤差、MAE) -上記の2つの値とは対照的に、異常値にはそれほど敏感ではありません。

L=1Ni=1N|ypredicted(i)yexpected(i)|



-クロスエントロピー(クロスエントロピー) -分類タスクの使用:

L=i=1Nj=1Myexpected(ij)log(ypredicted(ij))



どこ

N -トレーニングセットのコピー数

M -分類問題を解決するときのクラスの数

yexpected -期待される出力値

ypredicted-トレーニング済みモデルの実際の出力値



特定のケースでは、MSEを使用します。

L=1Ni=1N(ypredicted(i)yexpected(i))2=(0.21)2=0.64





ステップ3-逆伝播

ニューラルネットワークのトレーニングの目標は単純です-エラー関数を最小化することです:

Lmin



関数の最小値を見つける1つの方法は、学習の連続する各ステップで勾配ベクトルと反対の方向に接続の重みを変更することです。勾配降下法です。数学的には次のようになります。

w(k+1)=wkμL(wk)



どこ k -ニューラルネットワークトレーニングのk回目の反復。

μ-学習率はエンジニアが設定します。通常は0.1です。0.01(学習ステップが学習収束プロセスにどのように影響するかについては、少し後で注意してください)

L-エラー関数

の勾配勾配を見つけるために、カスタム引数に関して部分導関数を使用しますw1,w2

L(w)=[Lw1LwN]



私たちの特定のケースでは、すべての単純化を考慮に入れると、エラー関数は次の形式を取ります。

L(w1,w2)=(ypredictedyexpected)2=(x1w1+x2w2yexpected)2=

=(1w1+0.5w21)2



派生式メモ
,

ddxc=0;c=const

ddx[cf(x)]=cf(x); c=const

ddxxn=nxn1

ddx[f(x)±g(x)]=f(x)±g(x)

ddx[f(x)g(x)]=f(x)g(x)+g(x)f(x)

ddxf(g(x))=f(g(x))g(x)





次の部分的な派生物を見つけましょう。

w1(w1+0.5w21)2=2(w1+0.5w21)w1(w1+0.5w21)=

=2(w1+0.5w21)1=2(0.1+0.50.21)=1.6



w2(w1+0.5w21)2=2(w1+0.5w21)w2(w1+0.5w21)=

=2(w1+0.5w21)0.5=2(0.1+0.50.21)0.5=0.8





次に、エラーの逆伝播のプロセスは、モデルに沿って出力から入力に向かって移動し、モデルの重みを勾配ベクトルと反対の方向に変更します。学習ステップ0.1(学習率)を設定すると(図7):

w1(k+1)=w1(k)μL(w1,w2)w1=0.10.1(1.6)=0.26



w2(k+1)=w2(k)μL(w1,w2)w2=0.20.1(0.8)=0.28





図7-エラーの逆伝播

したがって、エラーが減少し、新しい重みを持つモデルからの出力が期待に近づくことを確認するためにk + 1トレーニングステップを完了しました。新しい重みを持つモデル上でエラーを順方向に伝播するプロセスを実行します(ステップ1を参照)。 :

ypredicted=x1w1+x2w2=10.26+0.50.28=0.4



ご覧のとおり、出力値は期待される結果に向かって正しい方向に0.2単位増加しています-1。その場合、エラーは次のようになります。

L=(0.41)2=0.36



ご覧のとおり、前のトレーニングステップでは、エラーは0.64でした。したがって、新しい重み-0.36を使用して、モデルを正しい方向に調整しました。



記事の次の部分:

機械学習。ニューラルネットワーク(パート2):ORモデリング。TensorFlow.jsマシンラーニングとのXOR

ニューラルネットワーク(パート3)-顕微鏡下での畳み込みネットワーク。Tensorflow.jsAPIの調査



All Articles