一、为什么使用神经网络?
- 复杂的非线性分类,决策边界很复杂
- 特征过多时,特征映射项非常多,计算成本高,容易过拟合,例如:图片的分类问题
二、神经元与大脑
- 起源:用来模拟大脑的算法
- 我们几乎可以将任何传感器接入大脑
- 主要学习将它应用于现代机器学习技术
三、神经网络结构及表达
-
神经网络模型:(逻辑单元)
组成单元:输入,隐藏层,权重,输出,如图所示
数学推导: a i ( j ) a_i^{(j)} ai(j)为第j个激活层的第i个单元, θ ( j ) \theta^{(j)} θ(j)为从j层到j+1层的偏重
a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) h Θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) a_1^{(2)}=g(\Theta_{10}^{(1)}x_0+\Theta_{11}^{(1)}x_1+\Theta_{12}^{(1)}x_2+\Theta_{13}^{(1)}x_3)\\ a_2^{(2)}=g(\Theta_{20}^{(1)}x_0+\Theta_{21}^{(1)}x_1+\Theta_{22}^{(1)}x_2+\Theta_{23}^{(1)}x_3)\\ a_3^{(2)}=g(\Theta_{30}^{(1)}x_0+\Theta_{31}^{(1)}x_1+\Theta_{32}^{(1)}x_2+\Theta_{33}^{(1)}x_3)\\ h_{\Theta}(x)=g(\Theta_{10}^{(2)}a_0^{(2)}+\Theta_{11}^{(2)}a_1^{(2)}+\Theta_{12}^{(2)}a_2^{(2)}+\Theta_{13}^{(2)}a_3^{(2)}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
前向传播==向量化实现方法:==剩下的表示以此类推,别忘了加偏执
z
(
2
)
=
Θ
(
1
)
x
a
(
2
)
=
g
(
z
(
2
)
)
z^{(2)}=\Theta^{(1)}x\\ a^{(2)}=g(z^{(2)})
z(2)=Θ(1)xa(2)=g(z(2))
逻辑回归单元组成了神经网络
四、神经网络的例子
-
完成逻辑运算:
五、神经网络解决多元分类问题
六、代价函数
-
字母表示:
L为网络层数
s_l 为第l层的神经元个数
K 为output层神经元个数,即 h Θ ( x ) ∈ R K h_\Theta(x)\in R^{K} hΘ(x)∈RK
m 为数据个数
i 为第几个数据
j l层的第几个节点
表达式:
J ( Θ ) = − 1 m ( ∑ i = 1 m ∑ k = 1 K y k ( i ) l o g ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) l o g ( 1 − ( h Θ ( x ( i ) ) ) k ) ) + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta)=-\frac{1}{m}\Bigg(\sum_{i=1}^{m}\sum_{k=1}^{K}y_k^{(i)}log(h_{\Theta}(x^{(i)}))_k + (1-y_k^{(i)})log(1-(h_{\Theta}(x^{(i)}))_k) \Bigg) + \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(\Theta_{ji}^{(l)})^2 J(Θ)=−m1(i=1∑mk=1∑Kyk(i)log(hΘ(x(i)))k+(1−yk(i))log(1−(hΘ(x(i)))k))+2mλl=1∑L−1i=1∑slj=1∑sl+1(Θji(l))2
七、反向传播算法–代价函数最小化
前向传播算法计算了每一个神经元的激活值
-
引入表示:l层第j个神经节点的激活值误差 δ j ( l ) \delta^{(l)}_j δj(l)
-
反向传播过程:
-
-
只有一组数据时的反向传播计算
δ j ( 4 ) = a j ( 4 ) − y j δ ( 3 ) = ( Θ ( 3 ) ) T δ ( 4 ) . ∗ g ′ ( z ( 3 ) ) δ ( 2 ) = ( Θ ( 2 ) ) T δ ( 3 ) . ∗ g ′ ( z ( 2 ) ) 其 中 , 第 一 层 为 输 入 数 据 不 存 在 误 差 , 我 们 不 改 变 输 入 值 \delta^{(4)}_j=a^{(4)}_j-y_j\\ \delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)}.*g'(z^{(3)})\\ \delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)}.*g'(z^{(2)})\\ 其中,第一层为输入数据不存在误差,我们不改变输入值 δj(4)=aj(4)−yjδ(3)=(Θ(3))Tδ(4).∗g′(z(3))δ(2)=(Θ(2))Tδ(3).∗g′(z(2))其中,第一层为输入数据不存在误差,我们不改变输入值
公式推导https://blog.csdn.net/xuan_liu123/article/details/83660316?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-1-83660316.nonecase&utm_term=反向传播 吴恩达 推导 -
当有大量数据计算时重点来啦
数据集: ( x ( 1 ) , y ( 1 ) ) , . . . , ( x ( m ) , y ( m ) ) {(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})} (x(1),y(1)),...,(x(m),y(m))
初始设置:对于任意的l,i,j: Δ i j ( l ) = 0 \Delta_{ij}^{(l)}=0 Δij(l)=0,用来累计偏导数项,除了输入节点所有节点的误差和
l为层数,i为第l层的第几个误差
步骤:
For i=1 to m: Set a^(1) = x^(i) Perform forward propagation to compute a^(l) for l = 2,3,...l compute delta^(L)=a^(L)-y^(i) compute delta^(L-1),delta^(L-2),...,delta^(2) △_ij^(l) := △_ij^(l) + a_j^(l)delta^(2)
当输出y为实数时,不用加入正则项
-
-
反向传播的理解:
八、梯度检验
解决神经网络虽然梯度下降但是效果并不理想,可以发现反向传播是否错误。
-
对于 θ \theta θ是实数 (类似于导数)
-
对于 θ \theta θ为n维向量(类似于偏导数)
-
算法思想: g r a d A p p r o x ≈ D V e c gradApprox \approx DVec gradApprox≈DVec
-
实现步骤:
- 通过反向传播计算DVec
- 估算数值梯度
- 确保二者是相近的值
- 在使用反向传播训练之前,关闭梯度检查(因为数值计算很慢,影响运行速度,同时也是因为这个原因不能使用该方法作为优化算法)
九、参数的随机初始化
- 梯度下降算法:初始化为0
- 神经网络实际操作,初始化为0不起任何作用,会使隐藏层的所有神经元值相同
- ==初始化 Θ \Theta Θ在 [ − ε , ε ] [-\varepsilon,\varepsilon] [−ε,ε]之间的随机值
十、神经网络的总结
-
选择一个网络结构:
输入的单元个数确定,输出的单元个数确定,隐藏层数目越多越好
-
训练神经网络