[关闭]
@FE40536 2019-08-06T19:32:32.000000Z 字数 1959 阅读 1393

吴恩达机器学习009反向传播

算法 机器学习


代价函数



首先任然介绍一些符号的意义:
表示的是神经网络的层数
表示的是第层的神经元数



神经网络分类的代价函数,相当于把多个输出项里求了一次和,再合到一次求了一次和。







反向传播算法



神经网络的计算顺序,以单个训练集为例





反向传播求导





理解反向传播



正向传播过程(最后一步应该是



用一个样本来理解一下反向传播



可以理解为用误差和权重来反向求得们的偏导数


使用注意:展开参数

对于一个输入层有十层,隐藏层有十层的神经网络,可以得到10×11的矩阵一个和一个1×11的矩阵,但这里给出了两个10×11的矩阵。
还可以得到同样多的求导矩阵
在octave中,要想将三个theta矩阵或者D矩阵转化为向量,可以用图中的代码来实现
要想将向量再转化为矩阵,可以用rashap函数来实现


  1. octave:1> Theta1=ones(10,11)
  2. Theta1 =
  3. 1 1 1 1 1 1 1 1 1 1 1
  4. 1 1 1 1 1 1 1 1 1 1 1
  5. 1 1 1 1 1 1 1 1 1 1 1
  6. 1 1 1 1 1 1 1 1 1 1 1
  7. 1 1 1 1 1 1 1 1 1 1 1
  8. 1 1 1 1 1 1 1 1 1 1 1
  9. 1 1 1 1 1 1 1 1 1 1 1
  10. 1 1 1 1 1 1 1 1 1 1 1
  11. 1 1 1 1 1 1 1 1 1 1 1
  12. 1 1 1 1 1 1 1 1 1 1 1
  13. octave:2> Theta2=2*ones(10,11)
  14. Theta2 =
  15. 2 2 2 2 2 2 2 2 2 2 2
  16. 2 2 2 2 2 2 2 2 2 2 2
  17. 2 2 2 2 2 2 2 2 2 2 2
  18. 2 2 2 2 2 2 2 2 2 2 2
  19. 2 2 2 2 2 2 2 2 2 2 2
  20. 2 2 2 2 2 2 2 2 2 2 2
  21. 2 2 2 2 2 2 2 2 2 2 2
  22. 2 2 2 2 2 2 2 2 2 2 2
  23. 2 2 2 2 2 2 2 2 2 2 2
  24. 2 2 2 2 2 2 2 2 2 2 2
  25. octave:3> Theta3=3*ones(1,11)
  26. Theta3 =
  27. 3 3 3 3 3 3 3 3 3 3 3
  28. octave:4> thetaVec=[Theta1(:);Theta2(:);Theta3(:)];
  29. octave:5> size(thetaVec)
  30. ans =
  31. 231 1
  32. octave:6> reshape (thetaVec(1:110),10,11)
  33. ans =
  34. 1 1 1 1 1 1 1 1 1 1 1
  35. 1 1 1 1 1 1 1 1 1 1 1
  36. 1 1 1 1 1 1 1 1 1 1 1
  37. 1 1 1 1 1 1 1 1 1 1 1
  38. 1 1 1 1 1 1 1 1 1 1 1
  39. 1 1 1 1 1 1 1 1 1 1 1
  40. 1 1 1 1 1 1 1 1 1 1 1
  41. 1 1 1 1 1 1 1 1 1 1 1
  42. 1 1 1 1 1 1 1 1 1 1 1
  43. 1 1 1 1 1 1 1 1 1 1 1
  44. octave:7> reshape(thetaVec(111:220),10,11)
  45. ans =
  46. 2 2 2 2 2 2 2 2 2 2 2
  47. 2 2 2 2 2 2 2 2 2 2 2
  48. 2 2 2 2 2 2 2 2 2 2 2
  49. 2 2 2 2 2 2 2 2 2 2 2
  50. 2 2 2 2 2 2 2 2 2 2 2
  51. 2 2 2 2 2 2 2 2 2 2 2
  52. 2 2 2 2 2 2 2 2 2 2 2
  53. 2 2 2 2 2 2 2 2 2 2 2
  54. 2 2 2 2 2 2 2 2 2 2 2
  55. 2 2 2 2 2 2 2 2 2 2 2
  56. octave:8> reshape(thetaVec(221:231),1,11)
  57. ans =
  58. 3 3 3 3 3 3 3 3 3 3 3

梯度检测



双侧差分法可以让我们得到点近似的斜率,可以通过以下代码实现



对于一个可以按照图中的方法来得到数值上相近的导数值



我们可以用for循环来将一个n维的theta向量里的每一个值都进行双侧差分求得近似的梯度,再和反向传播得到的梯度进行对比,如果相差很小,那说明反向传播能够正常地发挥作用


随机初始化

如果里面的值都变成0的话,到最后会变成所有的激活值是一样的,会大大的抑制神经网络学习



于是我们为了避免这种权重对称现象,可以用rand函数将初始化为接近0的随机值来让接下来的正向传播、反向传播、梯度检验、梯度下降最小化代价函数


组合到一起



对于神经网络模型的构建,输入层和特征数相关,输出层个数和对应的情况相关,多种情况的话推荐将输出层设置层向量形式
对于隐藏层来说,通常是越多越好,但是计算量会增大



训练神经网络步骤



添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注