20170125 Coursera Stanford-MachineLearning/Week4-5

Week4/5:Neural Networks: Representation/Learning


其中黄色小圈代表一个神经元


分层

  • input layer
  • output layer
  • hidden layer隐藏层可以多于一个

a(j)i 是activation
Θ(j) 代表第j层到第j+1层的参数(权值)矩阵
sj+1 中的 1 指代 bias unit a(j)0

ForwardPropagation前向传播

setting  x=a(1)i a(i)0=1z(i+1)=Θ(i)a(i)a(i+1)=g(z(i+1))

用Neural Networks实现与或非等运算

g(z)函数图像可以参照逻辑回归一节
g(30+20x1+20x2)
g(10+20x1+20x2)
g(1020x1)
异或同或可以用多层去实现

Multiclass Classification

下图中的输出层有四项,分为四个类别,从上到下代表pedestrian car motorcycle truck

CostFunction相关定义

L total number of layers in the network 层数
sl number of units (not counting bias unit) in layer l l层的unit数(不包含bias unit)
K number of output units/classes 输出的类的数目

Cost Function:Neural Network

hΘ(x)K  (hΘ(x))i=ith outputJ(Θ)=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

一般不把bias unit Θ(l)i0=1 添加到正则项里面

Gradient computation:Backpropagation Algorithm 梯度计算方法:反向传播算法

又称为BP算法 用于计算 minΘJ(Θ)

对于sigmoid函数

f(x)=sigmoid(x)=11+ex  f(x)=f(x)(1f(x))

δ(l)j “error” of node j of layer l
没有 δ(1) ,因为输入层无误差

上图中还忽略了 λ 令其为0

Gradient Checking

可以证明在特定情况下上图右下角等式是正确的,而 D(l)ij (BP算法)的计算方法效率要远高于直接 Θ1J(θ)J(θ1+ϵ,θ2,...)J(θ1ϵ,θ2,...)2ϵ (数值计算梯度算法),所以一般求 minΘ D(l)ij

在使用BP之前先用传统数值方法检验BP算法的正确性(对不同方法得到的结果进行对比,如果结果近似说明BP算法正确)

数学原理

FP之后BP
FP为

setting  x=a(1)i a(i)0=1z(i+1)=Θ(i)a(i)a(i+1)=g(z(i+1))

BP中

随机初始化 Random Initialization 参数 Θ


如果我们最开始初始化的时候 Θ(l)ij=0 for all i,j,l 这样的话会导致最后的 a(2)1=a(2)2 即导致同一个隐藏层内的每一个神经单元的值相等。使得Neural Network的性能下降,无法进行更有意义的功能
所以我们必须使用随机初始化 Random Initialization,以破坏对称性

在区间 [ϵ,ϵ] 内随机初始化每一个 Θ(l)ij
必须对一个参数矩阵进行随机初始化,这样可以确保矩阵内的每一个参数值不同。

不可以直接取一个在区间 [ϵ,ϵ] 的随机数再将其赋值于一个 Θ(l)ij 然后对所有i,j,l循环,因为这样无法破坏对称性

总结

一般来说,每一个隐藏层的units数目可以设置为相同

训练一个Neural Network的步骤

  • Randomly initialize weights 随机初始化参数(又称为权值weight)
  • Implement forward propagation to get hΘ(x(i)) for any x(i) 实现前向传播得到没一个数据 x(i) hΘ(x(i))
  • Implement code to compute cost function J(Θ) 写代码去实现计算CostFunction
  • Implement backprop to compute partial derivatives Θ(l)ijJ(Θ) 实现BP算法(后向传播算法)去计算偏导数
  • Using gradient checking to compare Θ(l)ijJ(Θ) computed using backpropagation vs. using numerical estimate of gradient of J(Θ) .Then disable gradient checking code. 把BP算法得到的偏导数 Θ(l)ijJ(Θ) 与数值方法得到的 Θ(l)ijJ(Θ) 的估计值进行比较,也就是说Gradient Checking确保上述两种计算方法得到基本接近的值。然后把GradientChecking的代码给注释了……
  • 使用梯度下降或者其他高级优化方法(BFGS等等)与BP算法相结合去最小化 J(Θ) 函数的值,以得到最合适的参数 Θ

对于Neural Network的 J(Θ) 是一个非凸函数(non-convex),所以可能会停留在局部最小值而不是全局最小值,但这个局部最小值一般也是已经挺小的了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值