根据上下文窗口 建立词向量
通过一个神经网络层,通过一个逻辑分类器,得到这个概率是属于特定实体词的预测概率。
另一个分类器来比较说明 这个词是哪个实体类型(比较概率)
h
=
f
(
z
)
,
∂
h
∂
z
是什么
?
h
,
z
∈
R
n
\boldsymbol{h}= f( \boldsymbol{z}) ,\ \, \frac {\partial\boldsymbol{h}}{\partial\boldsymbol{z}}是什么? \ \ \ \ \ \ \ \ h,z\in\mathbb{R}^n
h=f(z), ∂z∂h是什么? h,z∈Rn
h
i
=
f
(
z
i
)
h_i=f(z_i)
hi=f(zi)
(
∂
h
∂
z
)
i
j
=
∂
h
i
∂
z
j
=
∂
∂
z
j
f
(
z
i
)
雅可比行列式的定义
=
{
f
′
(
z
i
)
if
i
=
j
0
if otherwise
常规的一个变量的导数
∂
h
∂
z
=
(
f
′
(
z
1
)
0
⋱
0
f
′
(
z
n
)
)
=
diag
(
f
′
(
z
)
)
\left.\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{z}}=\left(
∂
∂
x
(
W
x
+
b
)
=
W
∂
∂
b
(
W
x
+
b
)
=
I
(单位矩阵)
∂
∂
u
(
u
T
h
)
=
h
T
δ
\delta
δ 是局部误差符号,是固定的。
雅可比公式表达: 如果有一个函数 y = f ( x ) ,其中 x 是一个向量, y 是一个向量, 则雅可比矩阵 J 的元素 J i j 表示 y i 对 x j 的偏导数。 雅可比公式表达:\\ 如果有一个函数 y = f(x),其中 x 是一个向量,y 是一个向量,\\ 则雅可比矩阵\ J\ 的元素\ J_{ij}\ 表示\ y_i\ 对\ x_j\ 的偏导数。 雅可比公式表达:如果有一个函数y=f(x),其中x是一个向量,y是一个向量,则雅可比矩阵 J 的元素 Jij 表示 yi 对 xj 的偏导数。
W ∈ R n × m W\in\mathbb{R}^{n\times m} W∈Rn×m , ∂ s ∂ W \frac{\partial s}{\partial W} ∂W∂s 的形状是:
b ∈ R n × 1 b\in\mathbb{R}^{n\times 1} b∈Rn×1 , ∂ s ∂ b \frac{\partial s}{\partial b} ∂b∂s 的形状是:
∂ s ∂ W = δ ∂ z ∂ W \quad\frac{\partial s}{\partial W}=\boldsymbol{\delta}\frac{\partial z}{\partial W} ∂W∂s=δ∂W∂z
δ \delta δ 将出现在我们的答案中。
另一项应该是 x x x ,因为 z = W x + b z=Wx+b z=Wx+b
∂ s ∂ b = δ ∂ z ∂ b \quad\frac{\partial s}{\partial b}=\boldsymbol{\delta}\frac{\partial z}{\partial b} ∂b∂s=δ∂b∂z
δ \delta δ 将出现在我们的答案中。
另一项应该是 1 1 1 ,因为 z = W x + b z=Wx+b z=Wx+b
这表明 ∂ s ∂ W = δ T x T \frac{\partial s}{\partial W}=\boldsymbol{\delta}^T\boldsymbol{x}^T ∂W∂s=δTxT ∂ s ∂ b = δ T \frac{\partial s}{\partial b}=\boldsymbol{\delta}^T ∂b∂s=δT
δ \delta δ 是 z 处的局部误差信号
x 是本地输入信号
求导,使用链式法则
神经网络的基本附加元素是 发回梯度,告诉我们怎么更新模型的参数,使得模型在 获得损失函数后进行学习(最小化损失)。
就像前面手动计算梯度下降那样
现在的深度学习神经网络框架(Tensorflow, PyTorch, etc…)可以自动做反向传播,但是主要让层/节点编写器手动计算局部导数。我们需要为图中的特定节点或层添加内容。
class ComputationalGraph(object):
#.....
def forward(inputs):
# 1.[pass inputs to input gates...]
# 2. forward the computational graph:
# 根据节点在计算图中的依赖关系对节点进行拓扑排序
for gate in self .graph.nodes_topologically_sorted():
gate.forward()
return loss # the final gate in the graph outputs the loss
def backward():
# 反转图的拓扑排序
for gate in reversed(self.graph.nodes_topologically_sorted()):
gate.backward() # little piece of backprop (chain rule applied)
return inputs_gradients