主要讲反向传播算法及其实现过程,其实最好的方法就是多看几次视频,视频内容本身很棒,理解透彻就好。
神经网络的分类以及一些定义如下图
神经网络的代价函数如下图
对于每一行特征,我们都会给出K 个预测,基本上我们可以利用循环,对每一行特征都预测 K 个不同结果,然后在利用循环在 K 个预测中选择可能性最高的一个,将其与 y 中的实际数据进行比较。归一化的那一项只是排除了每一层θ0 后,每一层的Θ 矩阵的和。最里层的循环 j循环所有的行(由 sl +1 层的激活单元数决定),循环 i 则循环所有的列,由该层(sl 层)的激活单元数所决定。即:hθ(x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization 的 bias 项处理所有参数的平方和。
以前的向前传播算法
可以数学证明其中 g'(z(3))是 S 形函数的导数,g'(z(3))=a(3).*(1-a(3))。而(Θ(3))Tδ(4)则是权重导致的误差的和。
l 代表目前所计算的是第几层
j 代表目前计算层中的激活单元的下标,也将是下一层的第 j 个输入变量的下标。
i 代表下一层中误差单元的下标,是受到权重矩阵中第 i 行影响的下一层中的误差单元
的下标。
Backpropagation algorithm的实现过程粗略来讲就是先用向前传播算法计算,然后再从输出层起向前进行计算,知道输入层(注:输入层不进行计算)
函数的实现过程如下图,需要将变量转化成长的向量再进行计算
最后再将向量转化成变量,进行输出
估计梯度(求导数)的实现过程
需要将参数向量化(向量化是一个处理问题很好的方法)
特别需要注意的一点就是在运行程序的时候,一定要将检查梯度是否正常工作的代码注释掉(使其不能正常工作),否则程序运行会十分缓慢。
随机初始化
在神经网络中,我们是不随机初始化的,如果我们令所有的初始参数都为 0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非 0 的数,结果也是一样的。
我们通常初始参数为正负ε 之间的随机值,假设我们要随机初始一个尺寸为 10×11 的
参数矩阵
训练一个神经网络
训练神经网络的步骤如下