質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1072閲覧

誤差逆伝播の重みの更新式の仕組み

退会済みユーザー

退会済みユーザー

総合スコア0

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/05 11:04

編集2021/04/07 15:06

自分でニューラルネットワークを作ろうhttps://qiita.com/takahiro_itazuri/items/d2bea1c643d7cca11352#comment-a59cd26161ee56ea1220
の、

python

1 # 重みの更新 2 self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T) 3 self.w_ih += self.lr * np.dot((e_h * self.daf(o_h)), o_i.T)

この式なんですが、なんでこんな式になるんでしょうか??
コードを見ると、「隠れ層」と「出力層」のみのようなのですが、
誤差に導関数をかけて、隠れ層をかける????

数式で書くと、どういう事になってるんでしょうか、数式で書いて説明して頂ければ、幸いです、微分してこんな形になるんですかね???

重みの式は以下らしいです(以下ページ参照
イメージ説明
https://qiita.com/perrying/items/6b782a21e0b105ea875cより。

以下、全て変数でおいてエクセルで計算しました、しかし重みの式になるのか・・・?
e_hをまだ偏微分していないので分かりません、なるんでしょうか?
また計算どこか誤ってますかね?

省略されていますが、e_h(e_oでなく)の式は(すいません、e_hの式間違ってました、画像では訂正してませんが、以下に訂正します)、

e_h
wh[0,0]{t[0]-f(wh[0,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[0,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[1,0]{t[1]-f(wh[1,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[1,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[2,0]{t[2]-f(wh[2,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[2,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[3,0]{t[3]-f(wh[3,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[3,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}

wh[0,1]{t[0]-f(wh[0,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[0,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[1,1]{t[1]-f(wh[1,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[1,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[2,1]{t[2]-f(wh[2,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[2,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[3,1]{t[3]-f(wh[3,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[3,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}

wh[0,2]{t[0]-f(wh[0,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[0,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[1,2]{t[1]-f(wh[1,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[1,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[2,2]{t[2]-f(wh[2,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[2,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[3,2]{t[3]-f(wh[3,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[3,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}

wh[0,3]{t[0]-f(wh[0,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[0,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[0,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[1,3]{t[1]-f(wh[1,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[1,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[1,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[2,3]{t[2]-f(wh[2,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[2,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[2,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}+wh[3,3]{t[3]-f(wh[3,0]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,1]f(wi[0,0]i[0]+wi[0,1]i[1]+wi[0,2]i[2]+wi[0,3]i[3])+wh[3,2]f(wi[2,0]i[0]+wi[2,1]i[1]+wi[2,2]i[2]+wi[2,3]i[3])+wh[3,3]f(wi[3,0]i[0]+wi[3,1]i[1]+wi[3,2]i[2]+wi[3,3]i[3]))}
になりそうです、
これを偏微分するんでしょうか?一成分ずつ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seastar3

2021/04/05 12:10

機械学習、ディープラーニング、ニューラルネットワークなどのタグを追加した方がよいでしょう。
guest

回答3

0

ベストアンサー

Excelでわかる機械学習 超入門もお考えのような操作を実現している勉強になる本です。サンプルファイルで動かすとしくみがよく分かります。

投稿2021/04/06 12:11

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/06 17:21

式を付加したのですが・・・・・・ 大変みにくいですがあってますかね、 またこの途中に出てくるo_oを偏微分すればいいんでしょうか・・・?
guest

0

数式は前の回答で紹介したWebページのとおりですが、結局、多元連立方程式の各係数を決定する作業と捉えることができますから、行列式の勉強が必要です。内積については三角関数の勉強が必要で、誤差の判定については評価関数の理解のために統計学の勉強が必要です。
正直言って、私も最近、最短コースでわかる ディープラーニングの数学で勉強したばかりのにわか知識です。
勉強していくうちに、高次元の認識に人類は向かいだしたのだと、文明のターニングポイントを予感させられました。
そして、JupterNotebookの環境を用意して、ぜひサンプルコードを動かしてみるとよいでしょう。頭で分からなくても、高次元を掌で遊んでいる感覚が味わえます。

投稿2021/04/05 16:54

編集2021/04/06 12:14
seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/06 09:32

なんか適当に全て変数でおいて(tada,idata,randomも)、 行列計算して、シグモイドに代入し、重みの計算式に代入して導出 しようかなと思うのですが、みにくいのでエクセルで書いて、 この地道な方法で示すことできないものなんですかね? 一応重みの式は高校レベルの数学で解けるはずなんですが。
guest

0

同じくQiitaの勾配降下法についての記事のように、損失関数の誤差を足がかりに求める機械学習モデルを示す行列式まで辿り着く過程が勾配降下法の動作です。
このページの中の「勾配ベクトルについて」の章のprot 3dのグラフが示すように画像データが示す行列式が学習データが持つn個の項が形作る立体もしくはベクトルと考えて、n+1次元空間の上でのn次元平面の収まる場所を突き止めていく動作をとっています。すなわちこの空間が学習データが収まる範囲で、グラフ上のロート型が学習データの計算から均衡点まで落ち着いていく勾配降下法の動きを示します。最も均衡した点は、内積の値がマイナスの極小値に辿り着いた点(二つのベクトルが真逆の向きのときに内積が極小になるから)で、これが辿り着いた機械学習モデルが描くn個の軸で表すn+1次元空間上のベクトルもしくはそのベクトルに真に直交する平面になります。

投稿2021/04/05 12:00

編集2021/04/05 15:43
seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/05 15:53 編集

むずすぎる・・。 重みの式 と呼ばれるものを取ってきたのですが、 w[new,i]=w[i]-lr∂f(x)/∂w[i] w[new,i]-w[i]=-lr∂f(x)/∂w[i] w[i] += -lr∂f(x)/∂w[i] self.w_ho += -self.lr * ∂f(x)/∂w[i] self.w_ho += -self.lr * self.daf(o_o) とかなりそうなんですが、 np.dot((e_o * self.daf(o_o)), o_h.T) にならないような、具体的には、 なぜ、誤差e_oを掛けているのか・・・? そしてo_hを掛けているのか・・・? 合成関数の微分がどうにか関係してます・・・?
seastar3

2021/04/05 16:38

1 なぜ、誤差e_oを掛けているのか・・・?  微分の考え方でロート型になぞらえたグラフの形の傾きを調べます。この誤差は意図を持ってずらすことで生じさせたものです。 2 そしてo_hを掛けているのか・・・?  np.dot関数は、ベクトルの内積の計算といって、空間上の2つの矢印の方向と大きさに対応した一つの値を計算する関数です。ベクトル同士の面積のような値が求められます。これは同じ長さなら同方向のベクトル同士が極大の値をとり、垂直同士は0になり、鈍角になるとマイナスの値も出現し真逆方向のベクトル同士が極小値になります。グラフ図形のある座標点の傾きと測定用のベクトルとの内積ができるだけ極小値をとる座標をさがして、わざとぶれさせてはこの測定用のベクトルをグラフ平面上をただよわせるのです。 3 合成関数の微分がどうにか関係してます・・・?  ベクトルの座標がn次元ということは、画像データであれば単純に説明すればドットの数だけ座標軸を設定してグラフをなぞることになり、偏微分という考え方が出てきます。x1軸だけで考えて微分して、x2軸だけ考えて微分して、同様にxのn番目軸だけ考えて微分して、総合的に調べている地点の傾きを判定します。例えれば立体の影だけを多面的に切り取ってそれを計算式の形にまとめるような操作です。
seastar3

2021/04/05 16:38

具体的に答えるとこのような説明になります。例えば現実の円錐のような立体と地上の影との関係のように、影だけ見ても立体をとらえることはできないし、立体にとっても影の形が三角形でも円でも円弧でもどうでもいいのです。総合的に高次元の立体を捉えるためにはこのような機械学習の理論の有効性が評価されてきたのです。  しかし、何回も専門用語が出てくるので、やはり難解ですね。 (^_~)
退会済みユーザー

退会済みユーザー

2021/04/05 16:40

これって合成関数の微分使って数式で示せないんですかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問