私は、日常生活で使用している機械学習アルゴリズムの計算とメカニズムを理解するために、少し時間をかけています。
CS231nコースのバックプロパゲーションに関する文献を研究しているので、研究を続ける前にチェーンルールを正しく理解していることを確認したいと思います。
私がシグモイド関数を持っているとしましょう:
この場合、
この関数を計算グラフとして書くことができます(今のところ色付きの値は無視しています):
我々は、グループシグモイドの勾配を計算するためのモジュール化ノード缶単一の導出にその入力を:
最初に、前方伝搬を実行して、各ユニットの出力を取得します。
w = [2,-3,-3]
x = [-1, -2]
# Compute the forward pass
product = [w[0]*x[0]+w[1]*x[1]+w[2]]
activation = 1 / 1 + math.exp(-product)
活性化の勾配を計算するには、上記の式を使用できます。
grad_product = (1 - activation) * activation
私が混乱しているかもしれない、または少なくとも直感的ではないと感じる場所では、x
およびの勾配を計算していw
ます:
grad_x = [w[0] * activation + w[2] * activation]
grad_w = [x[0] * activation + x[1] * activation + 1 * activation]
より具体的には1 * activation
、勾配 wを計算するときになぜ適用するのか混乱しています。
xとwの両方の勾配の計算を推論しようとすると、読者が理論上の困難を見つけるのに役立つかもしれません...
各の勾配は、乗算の規則の下で対応するによって与えられます場合、です。次に、チェーンルールを使用して、これらのローカルグラディエントに(各パスの)連続するノードのグラジエントを乗算して、関数出力に対するそのグラディエントを取得します。これは計算するための計算を説明しています。
の勾配は、上記で説明したとまったく同じ(逆)方法で与えられます。この追加の表現はから来ているとますか?加算単位の局所勾配はすべての入力で常に1であり、乗算は勾配を関数の出力にチェーンした結果ですか?1 * activation
activation
私は現在の理解に部分的に自信がありますが、勾配の計算に含まれる計算に関する私の現在の直感を誰かが明確にしてくれるとありがたいです。