7-Neural Networks--Learning

1 - Cost Function 代价函数

对于如下的神经网络,
neural network

有m组训练数据: (x(1),y(1)),(x(2),y(2)),,(x(m),y(m)) 。注意此时的y是K x 1的向量,每个y(i)的取值是0或1。

定义如下参数:

  • L 网络的层数
  • S_l 第l层的节点数目(不含bias unit)

由第6节的分析,结合logistic regression的Cost function:

J(θ)=1m[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθ2j

推广得到Neural network的Cost function如下

J(θ)=1m[i=1mk=1Ky(i)klog(hθ(x(i)))k+(1y(i)k)log(1(hθ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(θ(l)ji)2hθ(x)RK,(hθ(x))i=ithoutput

Tips:这里因为输出(类别)有多个,所以需要把K个输出的error进行相加。

  • 注意事项:在Regularize cost function的时候,一定要去掉bias unit的影响!!!

2 - Backpropagation Algorithm 反向传播算法

2.1 计算条件
  • hθ(x)=g(z(4))
    • z(4)=θ(3)a(3)
    • a(3)=g(z(3))
    • z(3)=θ(2)a(2)
    • a(2)=g(z(2))
    • z(2)=θ(1)a(1)
    • a(1)=x
  • Cost function:
    J(θ)=1m[i=1mk=1Ky(i)klog(hθ(x(i)))k+(1y(i)k)log(1(hθ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(θ(l)ji)2
  • 目标: minθJ(θ) 时的θ值。
  • 需要计算的:
    • J(θ)
    • θ(l)ijJ(θ)
2.2 算法步骤
  • 参数:

    • δ(l)j= 第l层的第 j 个元素的误差

    δ(4)j=a(4)jyj
    δ(3)=(θ(3))Tδ(4).g(z(3)) ,其中 g’(z3) = a3 .* (1 - a3)
    δ(2)=(θ(2))Tδ(3).g(z(2)) ,其中 g’(z2) = a2 .* (1 - a2)
    注意没有 δ(i) ,因为第一层是输入层

  • Δ(l)ij= 第 l 层的第 j 个元素到第 l+1 层的第 i 个元素之间的误差
  • 算法:
    algorithm

  • 关于算法的解释:
    • 算法的目的:计算 Δ(l)ij 的值。
    • D(l)ij:=1mΔ(l)ij+λθ(l)ijif0
    • D(l)ij:=1mΔ(l)ijifj=0
  • θ(l)ijJ(θ) 偏导计算公式 θ(l)ijJ(θ)=D(l)ij
  • 3 - Backpropagation Intuition 对反向传递算法的理解

    backprop

    4 - Implementation Note- Unrolling Parameters 算法实现技巧 - 参数展开

    对于Advanced optimization:

    function [jVal, gradient] = costFunction(theta)
    ...
    optTheta = fminunc(@costFunction, initialTheta, options)
    

    在Neural Network(L=4)中:

    • θ(1),θ(2),θ(3) - matrices (Theta1, Theta2, Theta3) 每层的θ都是矩阵
    • D(1),D(2),D(3) - matrices (D1, D2, D3) 都是矩阵

    多个参数矩阵在传递参数时不方便,因此需要将其展开成向量

    示例:
    vec

    5 - Gradient Checking 算法正确性检查

    计算方法(推荐的 EPSILON 值是0.0001):
    checking

    实现步骤

    • 用反向传递算法计算 DVec(由 D(1),D(2),D(3) 展开而来)
    • 用 numerical gradient check 来计算 gradApprox
    • 比较二者的值,正常情况下它们应该近似
    • 关闭 gradient checking。用反向传递算法继续学习。

    要点:

    • 在训练分类器之前一定要确保关闭gradient checking,否则程序会运行的非常非常慢!!

    6 - Random Initialization 初始化θ的方法 - 随机初始化

    为什么不能将 θ 全部初始化为 0:

    • After each update, parameters corresponding to inputs going into each of two hidden units are identical.

    初始化方法
    initialize

    7 - Putting It Together 反向传递算法实现步骤总结

    准备工作:选择网络结构

    • input units数量:输入量 x(i) 的维度
    • output units数量:分类器的类别数量
    • hidden layer数量:reasonable default是1层,如果大于一层,那么最好每层的节点数都相同(当然越多越好)

    算法步骤:训练神经网络

    • 随机化的初始权重 θ 的值。
    • 用前向传递方法计算在 initialθ 情况下每个输入 x(i) 所对应的 hθ(x(i)) 。注意,此时的 hθ(x(i)) 是一个 K x 1向量,每位取值是0到1之间的一个小数。因为这时处于训练阶段,因此千万不可将其取整化为0或1!
    • 实现 cost function 的计算公式
    • 用反向传递算法计算偏微分 θ(l)jkJ(θ)

      back
      详见 2.2 的算法部分!

    • 用 gradient check 方法来比较用反向传递算法计算出来的 θ(l)jkJ(θ) 和用numerical estimate gradient方法计算出来的gradApprox

    • 关闭gradient check
    • 用gradient descent或者advanced optimization method来得到 J(θ)的最小值。

    8 - Autonomous Driving 神经网络的应用 - 汽车自动驾驶技术

    • 汽车前方的摄像头会采集前方的道路信息(主要指左右道路弯曲情况)
    • 驾驶员正常驾驶
    • 训练数据:
      • 输入X:摄像头拍摄的实时视频图像(30x30px)
      • 输出Y:驾驶员的左右转弯数据
    • 神经网络系统:根据训练数据进行学习,得出网络的参数。
    • 自动驾驶:根据训练出的神经网络系统,在得到道路实时视频图像数据之后,自主确定左右转弯情况。

    9 - 练习中出现的错误:

    在编写识别手写字体程序的cost function:

    J(θ)=1m[i=1mk=1Ky(i)klog(hθ(x(i)))k+(1y(i)k)log(1(hθ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(θ(l)ji)2

    的时候,犯下两大错误:

    • 输出的排序顺序是 1-2-3-4-5-6-7-8-9-0,对应的代码分别是 1-2-3-4-5-6-7-8-9-10
    • 不是任何时候都要去vectorilization
      • 错误的实现:
        J = - mean( sum( tempy*log(h) + (1-tempy)*log(1 - h) ) ) ; %temp是由y转化而成的10x5000的训练集输出数据,h是5000x10的估计值
      • 错误原因:
        • mean(sum(tempy*log(h)))为例,这里计算了每一个y与所有的h(θ)的误差,复杂度是n*n。而实际上只需要计算每一个y与相对应的h(θ)的误差
    • 正确的实现:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值