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
ForwardPropagation前向传播
用Neural Networks实现与或非等运算
g(z)函数图像可以参照逻辑回归一节
与
g(−30+20x1+20x2)
或
g(−10+20x1+20x2)
非
g(10−20x1)
异或同或可以用多层去实现
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
一般不把bias unit Θ(l)i0=1 添加到正则项里面
Gradient computation:Backpropagation Algorithm 梯度计算方法:反向传播算法
又称为BP算法 用于计算
minΘJ(Θ)
对于sigmoid函数
δ(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为
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),所以可能会停留在局部最小值而不是全局最小值,但这个局部最小值一般也是已经挺小的了