【기계 학습 오차 역전파법】word2vec 메모 (1)
【기계 학습 오차 역전파법】word2vec 메모 (1)
【기계 학습 오차 역전파법】word2vec 메모 (2)
※공식의 번호는, 상기의 기사간에 공통입니다.
본 기사는 「제로로부터 만드는 Deep Learning2」(이하 「제로로부터 본 2」)의 word2vec(3장)의 독서 메모입니다. 3장에서는 word2vec의 CBOW 모델을 MatMul 노드를 사용하여 구현합니다. MatMul 노드는 1장에서 Python(Numpy) 프로그램으로 표시됩니다. Python 프로그램은 구체적이지만, 수학적으로 어떤 계산이 이루어지고 있는지 보이기 어려운 부분도 있습니다. 여기에서는 계산 메모로서, 그 근처를 좀 더 밝히고 싶습니다.
1장의 MatMul 노드에 대해서는, 「【기계 학습】오차 역전파법의 컴팩트한 설명」 에 정리하고 있습니다. 거기서 나타낸 공식을, 필요에 따라서 공식 번호로 참조합니다. 참조하십시오.
일반적인 MatMul 노드의 기울기
우선 MatMul 노드의 기울기의 계산(오차 역전파법)에 대한 복습입니다.
\begin{align}
&一般的なMatMulノードにおいて、勾配は以下の計算式で求めることができます。\\
\\
&\frac{\partial L}{\partial W} = X^T \times \frac{\partial L}{\partial Y} \tag{3-2}\\
\\
&\frac{\partial L}{\partial X} = \frac{\partial L}{\partial Y} \times W^T \tag{3-4}\\
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
입력 레이어의 기울기
CBOW 모델에서는 컨텍스트를 입력합니다. 이것은 두 개의 one-hot 벡터입니다. Forward 계산(추론)에서 one-hot 벡터와 행렬 $W_{in}$의 곱셈은 행 빼기와 다르지 않습니다. Backward(오차 역전파법)에 있어서는 위에서 나타낸 공식에 따라 계산할 수 있습니다.
\begin{align}
\\
&CBOWモデルの入力ベクトルは2つあります。\\
&X_1=(1 0 0 0 0 0 0)\\
&X_2=(0 0 1 0 0 0 0)\\
\\
&W_{in}を以下のようにします。\\
\\
&W=W_{in}=
\begin{pmatrix}
w_{11} & w_{12} & w_{13} \\
w_{21} & w_{22} & w_{23} \\
w_{31} & w_{32} & w_{33} \\
w_{41} & w_{42} & w_{43} \\
w_{51} & w_{52} & w_{53} \\
w_{61} & w_{62} & w_{63} \\
w_{71} & w_{72} & w_{73} \\
\end{pmatrix}
\\
\\
\\
&Forwardの計算です。\\
\\
&Y_1 = X_1 W_{in} = (w_{11} w_{12} w_{13})\\
&Y_2 = X_2 W_{in} = (w_{31} w_{32} w_{33})\\
\\
\\
\\
&Backwardの計算です。\\
\\
&CBOWモデルの特性から \frac{\partial L}{\partial Y_1} =\frac{\partial L}{\partial Y_2}なので、\\
&\frac{\partial L}{\partial Y_1} =\frac{\partial L}{\partial Y_2} = (l_1 l_2 l_3)とした時、\\
\\
&X_1ラインは以下のようになります。\\
\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\qquad \qquad \qquad ∵公式(3-2)
\\
\\
&X_2ラインは以下のようになります。\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
0 & 0 & 0 \\
0 & 0 & 0 \\
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\qquad \qquad \qquad ∵公式(3-2)
\\
\\
&重みはX_1とX_2で共有されますので、結局以下のようになります。\\
\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
중간층의 기울기
중간층에서 Forward는 단순히 행렬 $W_{out}$과의 곱셈을 수행합니다. Backward도 공식에 따라 계산합니다.
\begin{align}
\\
&中間層のベクトルです。\\
&X=(x_1 x_2 x_3)\\
\\
&W_{out}を以下のようにします。\\
&W=W_{out}=
\begin{pmatrix}
w'_{11} & w'_{12} & w'_{13} & w'_{14} & w'_{15} & w'_{16} & w'_{17} \\
w'_{21} & w'_{22} & w'_{23} & w'_{24} & w'_{25} & w'_{26} & w'_{27} \\
w'_{31} & w'_{32} & w'_{33} & w'_{34} & w'_{35} & w'_{36} & w'_{37} \\
\end{pmatrix}
\\
\\
\\
&Forwardの計算です。\\
\\
&Y = X W_{out} = \\
&(\sum_{k=1}^3 x_k w'_{1k} \sum_{k=1}^3 x_k w'_{2k} \sum_{k=1}^3 x_k w'_{3k} \sum_{k=1}^3 x_k w'_{4k} \sum_{k=1}^3 x_k w'_{5k} \sum_{k=1}^3 x_k w'_{6k} \sum_{k=1}^3 x_k w'_{7k})\\
\\
\\
\\
&Backwardの計算です。\\
\\
&SoftmaxWithLoss層の勾配を\frac{\partial L}{\partial Y} = (l_1 l_2 l_3 l_4 l_5 l_6 l_7)とした時、\\
&以下のようになります。 \quad where \quad l_i = y_i - t_i \qquad ∵公式(4-1)\\
\\
&\frac{\partial L}{\partial W_{out}} =
\begin{pmatrix}
x_1l_1 & x_1l_2 & x_1l_3 & x_1l_4 & x_1l_5 & x_1l_6 & x_1l_7 \\
x_2l_1 & x_2l_2 & x_2l_3 & x_2l_4 & x_2l_5 & x_2l_6 & x_2l_7 \\
x_3l_1 & x_3l_2 & x_3l_3 & x_3l_4 & x_3l_5 & x_3l_6 & x_3l_7 \\
\end{pmatrix}
\qquad ∵公式(3-2)
\\
\\
&\frac{\partial L}{\partial X} = (\sum_{k=1}^7l_kw'_{1k} \sum_{k=1}^7l_kw'_{2k} \sum_{k=1}^7l_kw'_{3k} )
\qquad \qquad ∵公式(3-4)\\
\\
\end{align}
이상입니다만, 이 메모를 보조로서 3장을 읽으면 계산이 시각적으로 이해하기 쉬워지는 것은? 라고 생각합니다.
Reference
이 문제에 관하여(【기계 학습 오차 역전파법】word2vec 메모 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sand/items/85ea76f9c26aabb849e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
\begin{align}
&一般的なMatMulノードにおいて、勾配は以下の計算式で求めることができます。\\
\\
&\frac{\partial L}{\partial W} = X^T \times \frac{\partial L}{\partial Y} \tag{3-2}\\
\\
&\frac{\partial L}{\partial X} = \frac{\partial L}{\partial Y} \times W^T \tag{3-4}\\
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
CBOW 모델에서는 컨텍스트를 입력합니다. 이것은 두 개의 one-hot 벡터입니다. Forward 계산(추론)에서 one-hot 벡터와 행렬 $W_{in}$의 곱셈은 행 빼기와 다르지 않습니다. Backward(오차 역전파법)에 있어서는 위에서 나타낸 공식에 따라 계산할 수 있습니다.
\begin{align}
\\
&CBOWモデルの入力ベクトルは2つあります。\\
&X_1=(1 0 0 0 0 0 0)\\
&X_2=(0 0 1 0 0 0 0)\\
\\
&W_{in}を以下のようにします。\\
\\
&W=W_{in}=
\begin{pmatrix}
w_{11} & w_{12} & w_{13} \\
w_{21} & w_{22} & w_{23} \\
w_{31} & w_{32} & w_{33} \\
w_{41} & w_{42} & w_{43} \\
w_{51} & w_{52} & w_{53} \\
w_{61} & w_{62} & w_{63} \\
w_{71} & w_{72} & w_{73} \\
\end{pmatrix}
\\
\\
\\
&Forwardの計算です。\\
\\
&Y_1 = X_1 W_{in} = (w_{11} w_{12} w_{13})\\
&Y_2 = X_2 W_{in} = (w_{31} w_{32} w_{33})\\
\\
\\
\\
&Backwardの計算です。\\
\\
&CBOWモデルの特性から \frac{\partial L}{\partial Y_1} =\frac{\partial L}{\partial Y_2}なので、\\
&\frac{\partial L}{\partial Y_1} =\frac{\partial L}{\partial Y_2} = (l_1 l_2 l_3)とした時、\\
\\
&X_1ラインは以下のようになります。\\
\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\qquad \qquad \qquad ∵公式(3-2)
\\
\\
&X_2ラインは以下のようになります。\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
0 & 0 & 0 \\
0 & 0 & 0 \\
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\qquad \qquad \qquad ∵公式(3-2)
\\
\\
&重みはX_1とX_2で共有されますので、結局以下のようになります。\\
\\
&\frac{\partial L}{\partial W_{in}} =
\begin{pmatrix}
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
l_1 & l_2 & l_3 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0 \\
\end{pmatrix}
\\
&\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \\
\end{align}
중간층의 기울기
중간층에서 Forward는 단순히 행렬 $W_{out}$과의 곱셈을 수행합니다. Backward도 공식에 따라 계산합니다.
\begin{align}
\\
&中間層のベクトルです。\\
&X=(x_1 x_2 x_3)\\
\\
&W_{out}を以下のようにします。\\
&W=W_{out}=
\begin{pmatrix}
w'_{11} & w'_{12} & w'_{13} & w'_{14} & w'_{15} & w'_{16} & w'_{17} \\
w'_{21} & w'_{22} & w'_{23} & w'_{24} & w'_{25} & w'_{26} & w'_{27} \\
w'_{31} & w'_{32} & w'_{33} & w'_{34} & w'_{35} & w'_{36} & w'_{37} \\
\end{pmatrix}
\\
\\
\\
&Forwardの計算です。\\
\\
&Y = X W_{out} = \\
&(\sum_{k=1}^3 x_k w'_{1k} \sum_{k=1}^3 x_k w'_{2k} \sum_{k=1}^3 x_k w'_{3k} \sum_{k=1}^3 x_k w'_{4k} \sum_{k=1}^3 x_k w'_{5k} \sum_{k=1}^3 x_k w'_{6k} \sum_{k=1}^3 x_k w'_{7k})\\
\\
\\
\\
&Backwardの計算です。\\
\\
&SoftmaxWithLoss層の勾配を\frac{\partial L}{\partial Y} = (l_1 l_2 l_3 l_4 l_5 l_6 l_7)とした時、\\
&以下のようになります。 \quad where \quad l_i = y_i - t_i \qquad ∵公式(4-1)\\
\\
&\frac{\partial L}{\partial W_{out}} =
\begin{pmatrix}
x_1l_1 & x_1l_2 & x_1l_3 & x_1l_4 & x_1l_5 & x_1l_6 & x_1l_7 \\
x_2l_1 & x_2l_2 & x_2l_3 & x_2l_4 & x_2l_5 & x_2l_6 & x_2l_7 \\
x_3l_1 & x_3l_2 & x_3l_3 & x_3l_4 & x_3l_5 & x_3l_6 & x_3l_7 \\
\end{pmatrix}
\qquad ∵公式(3-2)
\\
\\
&\frac{\partial L}{\partial X} = (\sum_{k=1}^7l_kw'_{1k} \sum_{k=1}^7l_kw'_{2k} \sum_{k=1}^7l_kw'_{3k} )
\qquad \qquad ∵公式(3-4)\\
\\
\end{align}
이상입니다만, 이 메모를 보조로서 3장을 읽으면 계산이 시각적으로 이해하기 쉬워지는 것은? 라고 생각합니다.
Reference
이 문제에 관하여(【기계 학습 오차 역전파법】word2vec 메모 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sand/items/85ea76f9c26aabb849e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
\begin{align}
\\
&中間層のベクトルです。\\
&X=(x_1 x_2 x_3)\\
\\
&W_{out}を以下のようにします。\\
&W=W_{out}=
\begin{pmatrix}
w'_{11} & w'_{12} & w'_{13} & w'_{14} & w'_{15} & w'_{16} & w'_{17} \\
w'_{21} & w'_{22} & w'_{23} & w'_{24} & w'_{25} & w'_{26} & w'_{27} \\
w'_{31} & w'_{32} & w'_{33} & w'_{34} & w'_{35} & w'_{36} & w'_{37} \\
\end{pmatrix}
\\
\\
\\
&Forwardの計算です。\\
\\
&Y = X W_{out} = \\
&(\sum_{k=1}^3 x_k w'_{1k} \sum_{k=1}^3 x_k w'_{2k} \sum_{k=1}^3 x_k w'_{3k} \sum_{k=1}^3 x_k w'_{4k} \sum_{k=1}^3 x_k w'_{5k} \sum_{k=1}^3 x_k w'_{6k} \sum_{k=1}^3 x_k w'_{7k})\\
\\
\\
\\
&Backwardの計算です。\\
\\
&SoftmaxWithLoss層の勾配を\frac{\partial L}{\partial Y} = (l_1 l_2 l_3 l_4 l_5 l_6 l_7)とした時、\\
&以下のようになります。 \quad where \quad l_i = y_i - t_i \qquad ∵公式(4-1)\\
\\
&\frac{\partial L}{\partial W_{out}} =
\begin{pmatrix}
x_1l_1 & x_1l_2 & x_1l_3 & x_1l_4 & x_1l_5 & x_1l_6 & x_1l_7 \\
x_2l_1 & x_2l_2 & x_2l_3 & x_2l_4 & x_2l_5 & x_2l_6 & x_2l_7 \\
x_3l_1 & x_3l_2 & x_3l_3 & x_3l_4 & x_3l_5 & x_3l_6 & x_3l_7 \\
\end{pmatrix}
\qquad ∵公式(3-2)
\\
\\
&\frac{\partial L}{\partial X} = (\sum_{k=1}^7l_kw'_{1k} \sum_{k=1}^7l_kw'_{2k} \sum_{k=1}^7l_kw'_{3k} )
\qquad \qquad ∵公式(3-4)\\
\\
\end{align}
Reference
이 문제에 관하여(【기계 학습 오차 역전파법】word2vec 메모 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sand/items/85ea76f9c26aabb849e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)