吴恩达机器学习9-神经网络分析

吴恩达机器学习9-神经网络分析

1.代价函数

在这里插入图片描述

首先回顾逻辑回归中的代价函数(相当于单个神经元)

J ( θ ) = − 1 m [ ∑ j = 1 n y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=-\frac{1}{m}\left[\sum_{j=1}^{n} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} J(θ)=m1[j=1ny(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2

再推广到神经网络中:
在这里插入图片描述

思想是一致的:通过代价函数来观察算法预测的结果与真实情况的误差有多大

公式解释:

对于每一行特征,我们都会给出𝐾个预测,基本上我们可以利用循环,对每一行特征都预测𝐾个不同结果,然后在利用循环在𝐾个预测中选择可能性最高的一个,将其与𝑦中的实际数据进行比较。

正则化的那一项只是排除了每一层𝜃0后,每一层的𝜃 矩阵的和。最里层的循环𝑗循环所有的行(由下一层(𝑠𝑙 +1) 层的激活单元数决定),循环𝑖则循环所有的列,由该层(𝑠𝑙层)的激活单元数所决定。即:ℎ𝜃(𝑥)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行正则化的偏置项处理所有参数的平方和。

2.反向传播

神经网络处理流程:
在这里插入图片描述

前向传播:

在这里插入图片描述

在这里插入图片描述

反向传播误差:

在这里插入图片描述

g ′ ( z ( 3 ) ) = a ( 3 ) ∗ ( 1 − a ( 3 ) ) g^{\prime}\left(z^{(3)}\right)=a^{(3)} *\left(1-a^{(3)}\right) g(z(3))=a(3)(1a(3))

有了所有的误差的表达式后,便可以计算代价函数的偏导数了,假设𝜆 = 0,即我们不做任何正则化处理时有:

∂ ∂ θ i j ( l ) J ( θ ) = a j ( l ) δ i l + 1 \frac{\partial}{\partial \theta_{i j}^{(l)}} J(\theta)=a_{j}^{(l)} \delta_{i}^{l+1} θij(l)J(θ)=aj(l)δil+1

𝑙 代表目前所计算的是第几层。

𝑗 代表目前计算层中的激活单元的下标,也将是下一层的第𝑗个输入变量的下标。

𝑖 代表下一层中误差单元的下标,是受到权重矩阵中第𝑖行影响的下一层中的误差单元的下标

如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用𝛥𝑖𝑗(𝑙)来表示这个误差矩阵。第 𝑙 层的第 𝑖个激活单元受到第 𝑗个参数影响而导致的误差。

算法流程:

在这里插入图片描述

先计算误差,再计算偏导数从而得到误差矩阵,进而求解代价函数的偏导数

3.编程注意

在 matlab中,如果我们要使用 fminuc 这样的优化算法来求解求出权重矩阵,需要将矩阵首先展开成为向量,在利用算法求出最优解后再重新转换回矩阵。

假设我们有三个权重矩阵,Theta1,Theta2 和 Theta3,尺寸分别为 10*11,10 *11 和1 *11, 下面的代码可以实现这样的转换:

thetaVec = [Theta1(:) ; Theta2(:) ; Theta3(:)]
Theta1 = reshape(thetaVec(1:110, 10, 11);
Theta2 = reshape(thetaVec(111:220, 10, 11);
Theta1 = reshape(thetaVec(221:231, 1, 11);

4.梯度检验

思想:通过估计梯度值来检验我们计算的导数值是否是我们要求的。

对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 𝜃,我们计算出在 𝜃-𝜀 处和 𝜃+𝜀 的代价值(𝜀是一个非常小的值,通常选取 0.004),然后求两个代价的平均,用以估计在 𝜃处的代价值(求导)。

在这里插入图片描述

gradApprox = (J(theta + eps) – J(theta - eps)) / (2*eps)

整体逻辑:

在这里插入图片描述

tips:训练过程中不要使用梯度检验

除了梯度检验,还需通过反向传播对计算出的偏导数进行检验

根据上面的算法,计算出的偏导数存储在矩阵 𝐷𝑖𝑗(𝑙) 中。检验时,我们要将该矩阵展开成为向量,同时我们也将 𝜃 矩阵展开为向量,我们针对每一个 𝜃 都计算一个近似的梯度值,将这些值存储于一个近似梯度矩阵中,最终将得出的这个矩阵同 𝐷𝑖𝑗(𝑙) 进行比较。

5.参数随机初始化

任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为 0,这样的初始方法对于逻辑回归来说是可行的,但是对于神经网络来说是不可行的。如果我们令所有的初始参数都为 0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果我们初始所有的参数都为一个非 0 的数,结果也是一样的。我们通常初始参数为正负𝜀之间的随机值,假设我们要随机初始一个尺寸为 10×11 的参数矩阵,代码如下:

Theta1 = rand(10, 11) * (2*eps) – eps

eps要足够小,稍大于0

6.整体分析

  • 选定网络结构:

第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。

第一层的单元数即我们训练集的特征数量。最后一层的单元数是我们训练集的结果的类的数量。

如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。

我们真正要决定的是隐藏层的层数和每个中间层的单元数。

  • 训练神经网络:
  1. 参数的随机初始化

  2. 利用正向传播方法计算所有的ℎ𝜃(𝑥)

  3. 编写计算代价函数 𝐽 的代码

  4. 利用反向传播方法计算所有偏导数

  5. 利用数值检验方法检验这些偏导数

  6. 使用优化算法来最小化代价函数

梯度下降

在这里插入图片描述

“找到去往山底的路径”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值