NPL Stanford-4.NPL with DL
@(NPL)[阅读笔记]
1. 从一个神经元开始
神经元是神经网络最基本的组成成分,它接收n个输入,产生单个输出。不同的神经元有着不同的参数(或称为权重),但本质上来说它依然在计算,使用某个特定的计算公式。神经元的计算公式(被称为激活函数(activition function)),最常用的就比如下面的sigmoid函数,它接收了n维向量
x
,产生了输出
注:
w
是同样n维的权重向量,
图示
2. 单层神经网络
单层神经网络就是多个神经元的排列,对每个神经元而言,他们接受一样的输入(注:不是全部模型都是接受相同的输入,此处方便理解),却可能产生完全不同的输出。原因在于每一个神经元的权重向量和偏差不一样,可以认为这是对输入向量不同特征的考量。
为了表示方便,我们定义如下:
其中 z=wTx+b
图示
3. 前馈计算
从前面我们看到单层神经网络每一个神经元都有一个输出,如果有m个神经元就会输出m维的向量。但是如果我们需要做一个分类,这样的输出是不合适的,因为我们希望的是一个值。因此我们可以使用另一个矩阵
U∈Rm×1
产生一个(非标准的)值:
f 即为激活函数。
注:如果输入的
4. Maximum Margin Objective Function
与大多数的机器学习模型一样,神经网络也需要一个最优化的目标函数。Maximum Margin Objective就是其中一种很流行的方式,背后的思想也很简单:保证 "true" 标签的样本计算得到的得分高于"false"标签的样本得分
。
比如,带有 “true” 标签的句子 “Museums in Paris are amazing” 标记为
s
,而带有 “false” 标签的句子 “Not all museums in Paris” 标记为
但是这样的最优化是有风险的,比如”true”和”false”样本得分都很接近,甚至相等。所以,我们希望提高一点门槛,两者之差最好大于一定的值。所以在原式基础上没我们添加一个充当正数的
Δ
(称为margin,间距):
其中 sc=UTf(wTxc+b),s=UTf(wTx+b)
如果学过SVM,应该知道max-margin objective function
5. 反向传播(Backpropagation)
如果J计算的结果为0,很显然我们并不需要更改任何参数,因为该模型表现得不错。但是如果大于0,我们就需要去更新一些参数使得结果能够尽可能符合我们的要求(保证 "true" 标签的样本计算得到的得分高于"false"标签的样本得分
)。
那么如何更新参数呢?梯度下降法(gradient descent)是最常用的方法,或者它的变体随机梯度下降(SGD)。
这部分本来写了一堆,最后还是觉得这个网页写得更清晰:
http://neuralnetworksanddeeplearning.com/chap2.html