🟥1.理解したい動機
趣味で2Dアクション迷路探索ゲームを自作しており、作中で敵キャラを動かしたい。やはり敵キャラは、敵キャラ自身が周囲の状況を知り、頭脳を使って考えて行動してほしい。行動パターンが単純だと攻略の定石パターンがすぐに見つかりゲームとして面白くない。

定石パターンを隠す為には、敵キャラの行動パターンの分岐を総当たりで計算する方法や、行動パターンを複数定義する方法があるが、私はその両者にゲーム作りの楽しさを感じず、プログラム作成作業がメンドクサイと感じる。
経験上、メンドクサイと感じた瞬間、ゲーム作りは停滞するので、避けねばならない。
敵キャラに頭脳を持たせる方法は、ChatGPT等のAPIを使うのは費用が掛かり、オープンウェイトのローカルLLMを使うのパソコン性能が必要で、両方とも手軽さがない。
そこで、自作ゲームの敵キャラの頭脳には、脳の仕組みをモデル化したニューラルネットワークと深層学習を使ってみたいと思う。
YouTubeの視聴と、AIとの対話で、ニューラルネットワークのモデルは理解した。しかし、深層学習の仕組みは難易度が高い。具体的には「誤差逆伝播法」による「パラメータの重みづけ訂正の方法」が難点だ。
本記事では、「誤差逆伝播法」による「パラメータの重みづけ訂正の方法」について自分なりに理解した内容を備忘として記す。
ちなみに「伝搬」は物理用語なので「伝播」が正となる
教材(YouTube動画)
ニューラルネットワークの仕組み | Chapter 1, 深層学習(ディープラーニング)
深層学習の仕組み, 勾配降下 | Chapter 2, 深層学習(ディープラーニング)
🟥2.ニューラルネットワークの入門知識
2-1.順伝播(=Forward)のモデル図
一般的に見るモデル図は、「活性化関数の表記」やバイアス値追加の為の「"1"の表記」が抜けているので、補完した簡易モデル図を作成した。

2-2.活性化関数について
2-2-1.活性化関数の種類
活性化関数は複数存在するが、「Sigmoid関数」「ReLU関数」の二つに絞る。数年前の解説資料は、Sigmoid関数がよく扱われていたが、勾配消失問題が発生するので、現在はReLU関数の利用が主流となる。
【補足】
活性化関数の表記に関し、Sigmoid関数はf(x),σ(x)やS(x)の表記がある一方で、ReLU関数はf(x)でほぼ統一している。
今回、活性化関数の表記をf(x)に統一しようかと思ったが、両者の区別に迷うので、Sigmoid関数はσ(x)として、ReLU関数はf(x)とした。
Sigmoid関数
Sigmoid関数:σ(x) = 1/(1 + e⁻ᵡ)
\displaylines{
Sigmoid関数
σ(x) = \frac{1}{1 + e^{-x}}\\
}
ReLU関数
ReLU関数:f(x) = max(0,x)
入力値 x ≦ 0 の時、「0」を出力し
入力値 x > 0 の時、入力値「x」をそのまま出力する。
\displaylines{
ReLU関数 f(x) = \max(0, x)
}
2-2-2.活性化関数の適用
活性化関数は中間層の各層に適用する。
出口層は活性化関数を適用しない場合もある。(ややこしい)
また、中間層と出力層の全てに同一関数を適用するわけでない。活性化関数の「Sigmoid関数」と「ReLU関数」の適用パターンを大別すると以下4種類になる。数年前の説明資料はNo.1が多かったが、現在の主流はNo.2や4となる。
| No. | 中間層 | 出力層 | 備考 |
|---|---|---|---|
| 1 | Sigmoid関数 | Sigmoid関数 | 勾配消失問題が発生しやすい |
| 2 | ReLU関数 | Sigmoid関数 | ReLU関数で勾配消失問題を抑える |
| 3 | ReLU関数 | ReLU関数 | 使わない |
| 4 | ReLU関数 | 関数を適用しない | これを使う場合もある |
【感想】
数年前の私は、Sigmoid関数一択だと思っていたが、活性化関数の主流が変化してReLU関数を適用すると聞いて、てっきりNo.3になると思っていたが、よくよくPython等のプログラム本文を読むと、内容がNo.2やNo.4だと知る。
解説にはそこまで書いてないので、これは理解のトラップ(罠)だと感じた。
2-2-3.活性化関数の参考リンク
🟥3.ニューラルネットワークの順伝播の流れ
3-1.入力層→中間層(重み付け+バイアス)
b₁,b₂ :バイアス
z₁= w₁₁x₁ + w₂₁x₂ + w₃₁x₃ + b₁
z₂= w₁₂x₁ + w₂₂x₂ + w₃₂x₃ + b₂
\displaylines{
b_1,b_2 :バイアス\\
z_1 = w_{11}x_1 + w_{12}x_2 + w_{13}x_3 + b_1\\
z_2 = w_{21}x_1 + w_{22}x_2 + w_{23}x_3 + b_2
}
3-2.中間層(重み付け+バイアス)→中間層(活性化関数)
f(x):活性化関数
h₁,h₂ :活性化関数を適用後の中間層
h₁ = f(z₁) = f(w₁₁x₁ + w₂₁x₂ + w₃₁x₃ + b₁)
h₂ = f(z₂) = f(w₁₂x₁ + w₂₂x₂ + w₃₂x₃ + b₂)
3-3.中間層(活性化関数)→出力層(重み付け+バイアス)
c₁,c₂ :バイアス
s₁ = v₁₁h₁ + v₂₁h₂ + c₁
s₂ = v₁₂h₁ + v₂₂h₂ + c₂
3-4.出力層(重み付け+バイアス)→出力層(活性化関数)
f(x):活性化関数
y₁,y₂ :活性化関数を適用後の出力層
y₁ = f(s₁) = f(v₁₁h₁ + v₂₁h₂ + c₁)
y₂ = f(s₂) = f(v₁₂h₁ + v₂₂h₂ + c₂)
🟥4.誤差逆伝播法の準備
4-1.出力層(活性化関数)と教師データ→誤差
出力層(活性化関数)と教師データとの差から「誤差」を算出する。
t₁,t₂ :教師データ
δy₁,δy₂ :誤差
δy₁ = y₁ - t₁
δy₂ = y₂ - t₂
\displaylines{
t_1,t_2 : 教師データ\\
δ_{y1},δ_{y2}:誤差\\
δ_{y1} = y_1-t_1\\
δ_{y2} = y_2-t_2\\
}
4-2.活性化関数を微分
傾き(勾配)を求める為、活性化関数を微分する。
以下に「Sigmoid関数の微分」と「ReLU関数の微分」を示す。
4-2-1. Sigmoid関数の微分
Sigmoid関数:σ(x) = 1/(1 + e⁻ᵡ)の微分
σ'(x) = σ(x)(1-σ(x)) = (1/(1 + e⁻ᵡ))*(1-1/(1 + e⁻ᵡ))
\displaylines{
Sigmoid関数:σ(x) =\frac{1}{1 + e^{-x}}の微分\\
σ'(x) = σ(x)(1-σ(x)) = (\frac{1}{1 + e^{-x}})(1-\frac{1}{1+e^{-x}})
}
参考
4-2-2. ReLU関数の微分
ReLU関数の微分:f(x) = max(0,x)
入力値 x ≦ 0 の時、「0」を出力し
入力値 x > 0 の時、入力値「x」をそのまま出力する式なので
x ≦ 0 の時、f’(x) = 0
x > 0 の時、f’(x) = 1
\displaylines{
x ≦ 0 の時、f'(x) = 0\\
x > 0 の時、f’(x) = 1\\
}
4-3.損失関数(=誤差関数)から損失値Eを出す。
損失関数(=誤差関数)は複数種類があるが、一般的には「平均二乗誤差(MSE)」で計算する。
E = \frac{1}{2}\sum_{i=1}^{n} (y_i-t_i)^2=\frac{1}{2}\sum_{i=1}^{n} δ_{yi}^2
以下の式もあるが、あまり使わない。
\displaylines{
E = \frac{1}{n}\sum_{i=1}^{n} (y_i-t_i)^2
or E = \frac{1}{2n}\sum_{i=1}^{n} (y_i-t_i)^2
}
具体的な計算例は以下となる。
E = 1/2*(δy₁² + δy₂²) = 1/2*((y₁ - t₁)² + (y₂ - t₂)²)
E = \frac{1}{2}(δ_{y1}^2 + δ_{y2}^2)=\frac{1}{2}[(y_1 - t_1)^2 + (y_2 - t_2)^2]
損失値Eは2乗の総和を計算しておりE≧0となる。このEはモデルの評価指標の値であり、損失値は小さければ小さい程、誤差が小さくなり良質なモデルとなる。
Eの値を最小にする計算を考える。
【補足】
損失関数式に於いて2で割っている理由は、次項で説明するが、2乗の項(yᵢ - tᵢ)²を微分(偏微分)すると2の係数が前に出て2(y - t)となり、2と1/2が相殺して1となり、編微分の計算結果がスッキリになる為となる。一般的にはこの「2」で割る方を利用する場合が多い。また、総数「n」で割る利点は、E≦1になって計算が楽になる。
式が一つの定まらないが、どの式を選んでも、傾き(勾配)の「向き」自体は変わらない為、深層学習の結果に影響しない(らしい)。
4-4.学習率(学習係数)ηと繰り返し学習
深層学習は、Eの値を最小にする計算を扱う。wやvの「重み係数」が適切な数値になれば。教師データと同じ解が得られて、Eが最小となる。
しかし、現状は適切な重み係数は分からない。そこで、重み係数を誤差逆伝播法によって、教師データとの誤差を「少しずづ」小さくする。「少し」「ずつ」のやり方は、
「少し」は学習率(学習係数)ηとして、数値はη=0.1や0.01に誤差変化量(=勾配)を掛け合わせ、
「ずつ」は繰り返し学習となり、例えば10000回を実施する。
for i=0;i<10000;i++{
新しい重み=古い重み-η×勾配
}
\displaylines{
v_{ji}^{new}=v_{ji}^{old}-η\frac{∂E}{∂v_{ji}}\\
c_i^{new}=c_i^{old}-η\frac{∂E}{∂c_i}\\
w_{ji}^{new}=w_{ji}^{old}-η\frac{∂E}{∂w_{ji}}\\
b_i^{new}=b_i^{old}-η\frac{∂E}{∂b_i}\\
}
🟥5.誤差逆伝播法のモデルと計算
5-1.誤差逆伝播法のモデルの解説図
ニューラルネットワーク(順伝播=Forward)のモデル図は散見されるが、「順伝播」と「逆伝播(=誤差逆伝播)」を一つまとめた、誤差逆伝播法の流れを含むモデル図は少ない。あってもちょっと難しい。やはり理解の為には自分で作るしかないので以下の様に作成した。難解だったが、理解の補助となった。
【参考】
↓途中までが理解の補助となったが、後半が難しい。
5-2.損失値Eの偏微分と連鎖律
誤差伝播法の計算では損失値Eを重み(wやv)で編微分した導関数を利用する。すなわち、
\frac{∂E(w,v)}{∂w_{ji}} , \frac{∂E(w,v)}{∂v_{ji}}
の様に編微分した導関数が必要である。更にこの導関数は連鎖律で算出する。連鎖律は微分の合成関数の拡張となるが、やや難しいので、少しだけ記載。
\displaylines{
損失値Eを導く式が、wとvの合成関数とした場合\\
E(α,β) , α=α(w) , β=β(v)\\
E(α,β) = E(α(w),β(v))\\
ここでEをwとvで偏微分する導関数の式を連鎖律で示すと以下となる\\
\frac{∂E}{∂w}=\frac{∂E}{∂α}\frac{∂α}{∂w}\\
\frac{∂E}{βv}=\frac{∂E}{∂β}\frac{∂β}{∂v}\\
}
5-3.損失値Eを重みvで偏微分する。
損失値$E$を重み$v_{ji}$で編微分する。偏微分の導関数は、以下の通り連鎖律で式を結合する。
\frac{∂E}{∂v_{ji}}=\frac{∂E}{∂δ_{yi}}\frac{∂δ_{yi}}{∂y_i}\frac{∂y_i}{∂s_{i}}\frac{∂s_i}
{∂v_{ji}}\\
連鎖律は、以下の4つの式を微分した導関数を利用する。
E =\frac{1}{2}\sum_{i=1}^{n} δ_{yi}^2= \frac{1}{2}\sum_{i=1}^{n} (y_i-t_i)^2 をδ_{yi}で微分\tag{1}
δ_{yi}=(y_i-t_i) をy_iで微分\tag{2}
y_i=σ(s_i) をs_iで微分\tag{3}
s_i = v_{1i}h_1+v_{2i}h_2+c_i をv_{ji}で微分\tag{4}
5-4.損失値Eを重みvで偏微分の連鎖律の具体的計算例
5-4-1.具体的計算
イメージが出来るように具体的な計算例を用いる。$E$を$v_{12}$で微分を目指す。まずは式(1)(2)を計算する。
\displaylines{
E = \frac{1}{2}\sum_{i=1}^{2} (y_i-t_i)^2 = \frac{1}{2}\ ((y_1-t_1)^2+(y_2-t_2)^2)= \frac{1}{2}\ (δ_{y1}^2+δ_{y2}^2)\\
δ_{y1}=(y_1-t_1)\\
このEをδ_{y2}の関数とみなしδ_{y2}で偏微分、\\
また、δ_{y2}をy_2の関数と見なしてy_2で偏微分して連鎖律で結合すると\\
\frac{∂E}{∂y_2}=[\frac{∂E}{∂δ_{y2}}][\frac{∂δ_{y2}}{∂y_2}] = [\frac{1}{2}×2δ_{y2}]×[1] =δ_{y2}\\
}
次に式(3)と(4)を計算する。
\displaylines{
y_2=σ(s_2) と s_2=v_{12}h_1+v_{22}h_2+c_2をv_{12}で偏微分した場合\\
y_2'=\frac{∂y_2}{∂v_{12}}=\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂v_{12}}=
\frac{∂σ(s_2)}{∂s_2}\frac{∂s_2}{∂v_{12}}\\
=σ'(s_2)・s_2'=σ(s_2)(1-σ(s_2))・h_1\\
}
以上の結果、(1)(2)(3)(4)を結合する。
\frac{∂E}{∂v_{12}}=[\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}][\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂v_{12}}]=δ_{y2}・σ'(s_2)・h_1
5-4-2.重みvに対する計算結果のまとめ
\displaylines{
\frac{∂E}{∂v_{11}}=\color{red}{\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}}\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂v_{11}}=\color{red}{δ_{y1}}・σ'(s_1)・h_1\\
\frac{∂E}{∂v_{12}}=\color{red}{\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}}\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂v_{12}}=\color{red}{δ_{y2}}・σ'(s_2)・h_1\\
\frac{∂E}{∂v_{21}}=\color{red}{\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}}\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂v_{21}}=\color{red}{δ_{y1}}・σ'(s_1)・h_2\\
\frac{∂E}{∂v_{22}}=\color{red}{\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}}\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂v_{22}}=\color{red}{δ_{y2}}・σ'(s_2)・h_2\\
\frac{∂E}{∂c_1}=\color{red}{\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}}\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂c_1}=\color{red}{δ_{y1}}・σ'(s_1)・1\\
\frac{∂E}{∂c_2}=\color{red}{\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}}\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂c_2}=\color{red}{δ_{y2}}・σ'(s_2)・1\\
}
5-5.損失値Eを重みwで偏微分する。
損失値$E$を重み$w_{ji}$で編微分する。偏微分の導関数は、以下の通り連鎖律で式を結合する。
\frac{∂E}{∂w_{ji}}=
[\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}\frac{∂y_1}{∂s_{1}}\frac{∂s_1}
{∂h_i}+
\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}\frac{∂y_2}{∂s_{2}}\frac{∂s_2}
{∂h_i}][\frac{{∂h_i}}{∂δ_{zi}}\frac{∂δ_{zi}}{∂w_{ji}}]\\
連鎖律は、以下の6つの式を微分した導関数を利用する。
E =\frac{1}{2}\sum_{i=1}^{n} δ_{yi}^2= \frac{1}{2}\sum_{i=1}^{n} (y_i-t_i)^2 をδ_{yi}で微分\tag{1}
δ_{yi}=(y_i-t_i) をy_iで微分\tag{2}
y_i=σ(s_i) をs_iで微分\tag{3}
s_i = v_{1i}h_1+v_{2i}h_2+c_i をh_iで微分\tag{4}
h_i = f(z_i) をz_iで微分\tag{5}
z_i = w_{ji}x_1 + w_{ij}x_2 + w_{ij}x_3 + b_iをw_{ji}で微分\tag{6}
5-6.損失値Eを重みwで偏微分の連鎖律の具体的計算例
5-6-1.損失値Eを重みwで偏微分の連鎖律の具体的計算例
具体的な計算例を用いる。$E$を$w_{12}$で微分を目指す。まずは式(1)(2)を計算する。
\displaylines{
E = \frac{1}{2}\sum_{i=1}^{2} (y_i-t_i)^2 = \frac{1}{2}\ ((y_1-t_1)^2+(y_2-t_2)^2)= \frac{1}{2}\ (δ_{y1}^2+δ_{y2}^2)\\
δ_{y1}=(y_1-t_1) , δ_{y2}=(y_2-t_2)\\
ここで、重みwは重みvとは違って、y_1とy_2の両方に影響するので両方計算が必要\\
y_1側:Eをδ_{y1}の関数とみなし、また、δ_{y1}をy_1の関数と見なして\\
Eをy_1で偏微分する場合、\\
\frac{∂E}{∂y_1}=[\frac{∂E}{∂δ_{y1}}][\frac{∂δ_{y1}}{∂y_1}] = [\frac{1}{2}×2δ_{y1}]×[1] =δ_{y1}\\
y_2側:Eをδ_{y2}の関数とみなし、また、δ_{y2}をy_2の関数と見なして\\
Eをy_2で偏微分する場合、\\
\frac{∂E}{∂y_2}=[\frac{∂E}{∂δ_{y2}}][\frac{∂δ_{y2}}{∂y_2}] = [\frac{1}{2}×2δ_{y2}]×[1] =δ_{y2}\\
}
次に式(3)と(4)を計算する。ここでも、y₁とy₂の両方に影響するので両方計算が必要
\displaylines{
y_1側:y_1=σ(s_1) と s_1=v_{11}h_1+v_{21}h_2+c_1をh_2で偏微分した場合\\
y_1'=\frac{∂y_1}{∂h_2}=\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂h_2}=\frac{∂σ(s_1)}{∂s_1}\frac{∂s_1}{∂h_2}\\
=σ'(s_1)・s_1'=σ(s_1)(1-σ(s_1))・v_{21}\\
y_2側:y_2=σ(s_2) と s_2=v_{12}h_1+v_{22}h_2+c_2をh_2で偏微分した場合\\
y_2'=\frac{∂y_2}{∂h_2}=\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂h_2}=\frac{∂σ(s_2)}{∂s_2}\frac{∂s_2}{∂h_2}\\
=σ'(s_2)・s_2'=σ(s_2)(1-σ(s_2))・v_{22}\\
}
次に式(5)と(6)を計算する。
\displaylines{
h_2 = f(z_2) をz_2で微分し、またz_2=w₁₂x₁ + w₂₂x₂ + w₃₂x₃ + b₂を\\
w_{12}で微分して連鎖律で結合すると\\
\frac{∂h_2}{∂w_{12}}=\frac{∂h_2}{∂z_2}\frac{∂z_2}{∂w_{12}}
= f'(z_2)・x_1\\
}
以上の結果、(1)(2)(3)(4)(5)(6)を結合する。
\displaylines{
\frac{∂E}{∂w_{12}}=
[
\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂h_2}+
\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂h_2}
]
[\frac{∂h_2}{∂z_2}\frac{∂z_2}{∂w_{12}}]=\\
\frac{∂E}{∂δ_{y1}}\frac{∂δ_{y1}}{∂y_1}\frac{∂y_1}{∂s_1}\frac{∂s_1}{∂h_2}
\frac{∂h_2}{∂z_2}\frac{∂z_2}{∂w_{12}}+
\frac{∂E}{∂δ_{y2}}\frac{∂δ_{y2}}{∂y_2}\frac{∂y_2}{∂s_2}\frac{∂s_2}{∂h_2}
\frac{∂h_2}{∂z_2}\frac{∂z_2}{∂w_{12}}=\\
[δ_{y1}・σ'(s_1)・v_{21}+δ_{y2}・σ'(s_2)・v_{22}][f'(z_2)・x_1]=\\
δ_{y1}・σ'(s_1)・v_{21}・f'(z_2)・x_1 + δ_{y2}・σ'(s_2)・v_{22}・f'(z_2)・x_1
}
5-6-2.重みwに対する計算結果のまとめ
\displaylines{
\frac{∂E}{∂w_{ji}}=[δ_{y1}・σ'(s_1)・v_{1i}+δ_{y2}・σ'(s_2)・v_{2i}][f'(z_i)・x_j]\\
\\
\frac{∂E}{∂w_{11}}=[δ_{y1}・σ'(s_1)・v_{11}+δ_{y2}・σ'(s_2)・v_{12}][f'(z_1)・x_1]\\
\frac{∂E}{∂w_{21}}=[δ_{y1}・σ'(s_1)・v_{11}+δ_{y2}・σ'(s_2)・v_{12}][f'(z_1)・x_2]\\
\frac{∂E}{∂w_{31}}=[δ_{y1}・σ'(s_1)・v_{11}+δ_{y2}・σ'(s_2)・v_{12}][f'(z_1)・x_3]\\
\\
\frac{∂E}{∂w_{12}}=[δ_{y1}・σ'(s_1)・v_{21}+δ_{y2}・σ'(s_2)・v_{22}][f'(z_2)・x_1]\\
\frac{∂E}{∂w_{22}}=[δ_{y1}・σ'(s_1)・v_{21}+δ_{y2}・σ'(s_2)・v_{22}][f'(z_2)・x_2]\\
\frac{∂E}{∂w_{32}}=[δ_{y1}・σ'(s_1)・v_{21}+δ_{y2}・σ'(s_2)・v_{22}][f'(z_2)・x_3]\\
\\
\frac{∂E}{∂b_1}=[δ_{y1}・σ'(s_1)・v_{11}+δ_{y2}・σ'(s_2)・v_{12}][f'(z_1)・1]\\
\frac{∂E}{∂b_2}=[δ_{y1}・σ'(s_1)・v_{21}+δ_{y2}・σ'(s_2)・v_{22}][f'(z_2)・1]\\
}
🟥6.所管
数週間かけて、勉強して作成した記事が以上となる。
変数の添え字が多いと理解できないので、簡易モデルは、入力層3要素→中間層1層で2要素→出力層2要素とした。
一方で、変数が少ないと拡張が困難となり、実践投入が出来ないので、中間層は2層が良かったが、おそらく2層にしたら勉強に挫折して記事にならなかった。
勉強の途中で、芋づる式に以下も薄く学んだ。きっかけがあれば記事にしたいと思う。
- CNN(畳込NN):画像認識・物体認識に強い、
- RNN(再帰NN):順番に処理(文章生成や音声認識)
- Transformer:単語と単語の関係や、文章全体で処理。
肝心のゲーム制作はどうなったかと言うと、誤差伝播法をプログラム化する作業に怖気(オジケ)づいたので、やってない。
要はメンドクサイと思ってしまったのだ。
AIに任せれば、良いプログラムを出力知っているが、そちらもやる気が起きない。
困ったもんだ。



