【深度之眼吴恩达机器学习第四期】笔记(四)

我们已经有线性回归和逻辑回归了,为什么还要使用神经网络呢?
对于一个有两个输入分量(x1,x2)的分类问题,我们使用这两个分量的组合来构造假设函数(图中右上角),可能可以得到一个合适的决策边界,如图中的粉红色的线。
但是如果我们的输入分量有很多,比如100个,我们的假设函数就非常复杂。仅仅二次项就有5050(=(1+100)*100/2)个,复杂度为O(n2),使用这个假设函数计算可能会存在计算量过大的问题。
当然我们也可以直接使用平方项而不考虑交叉项,这样相加项就只有100个,但是这样忽略的相关项太多了,可能没办法得到想要的结果(左上角的图的假设函数如果只有平方项只会得到一个椭圆)。
而且只有二次项可能还不够,我们还要考虑三次项(171700=100+100*99+C(100,3),复杂度为O(n3))以及更高次项。
在这里插入图片描述
总而言之,由于数据样本的差异,我们想要构建高次曲线来作为决策边界。我们不知道实际需要多少次幂,只能尽量取高次。但是在输入分量很多时,计算高次项的计算量太大,而且可能很多都是无效的。所以直接构造高次曲线并不是一个设计分类器的好方法。
比如,50*50的图片的输入分量为250(灰度图),那么它就有3百万左右的二次项。
在这里插入图片描述

神经网络

我们想换一个方法,通过模仿大脑的神经元来进行学习。
在使用神经网络时如何表示我们的假设或者模型?
黄色圆圈是一个神经元,蓝色圆圈代表输入,hθ(x)是输出,其中激活函数可以是Sigmoid函数或者其他函数。
在这里插入图片描述
多个神经元组成一个简单的神经网络,最左边的一列是输入层,中间是隐藏层(可以多于一层),然后是输出层。
在这里插入图片描述
前向传播的数学表达式,这里函数g是Sigmoid函数。
在这里插入图片描述
为什么神经网络有效呢?
我们遮住输入层后,发现这个神经网络看起来像逻辑回归,只不过输入不是X向量而是X向量经过组合得到的向量(组合后原来线性不可分的数据可能变得线性可分了)。
假设每个激活函数都是x2,那么第二层得到的就是一、二次项,第三层得到的就是低于四次项的假设函数,这时的参数个数为输入向量的维度*隐藏层神经元个数+隐藏层神经元个数*输出层神经元个数,这比直接设计假设函数的参数少多了。
在这里插入图片描述
神经网络的例子
没有隐藏层的神经网络可以实现并运算:
在这里插入图片描述
三种运算结合起来构成异或运算:
在这里插入图片描述
对于多分类问题,神经网络的输出层的神经元不再是一个,而是N个(N是类的数量,比如这里就是4),而且标签y也不是1,2,3……之类的数字,而是一个向量。
在这里插入图片描述

神经网络训练流程

在训练神经网络之前,我们需要确定神经网络的框架。
输入神经元的个数:Xi的维度
输出神经元的个数:分类的个数
隐藏层的层数、隐藏层的神经元个数(一般多于输入神经元的个数)也是要合理选择的。
在这里插入图片描述

  1. 随机初始化权重theta
    我们一般把theta初始化为[-ε,ε]的接近零的值,为什么我们不能直接把theta初始化为全是零呢?
    如果我们把theta初始化为零,那么在第一次前向传播时,每一层的所有神经元(除了恒为一的a0)的分数都是相同的。这就导致了每一层残差的分量相同,进而每一层的梯度分量相同。又因为theta=theta-梯度,所以更新后的theta的分量还是相同的,这就回到了开始的假设……
    后果就是每一层的神经元实际上只有两个是有用的,因为除了一个恒为一以外,其他神经元的分数永远相同。这样的模型比我们以为的简单得多,而且还有很多冗余的计算量。
    在这里插入图片描述
  2. 实现前向传播,得到hθ(x)
    前向传播过程如图所示:
    在这里插入图片描述
  3. 计算损失函数J(θ)
    神经网络的损失函数如下图所示,它看起来很复杂,但其实只是以前的损失函数的拓展。
    第一项比之前的损失函数多了一个从1到K的求和,因为现在有K个输出;第二项其实也只是把所有神经网络的权重theta加起来而已(注意:一般不加偏置项thetai0,当然加上也可以,但是不加的情况更常见一点)。
    在这里插入图片描述
  4. 计算J(θ)的梯度
    通过下图中的式子求各层的残差δl(不用计算第1层的残差)和梯度。因为这些残差和梯度是从后往前计算的,所以相对于前向传播,我们把这个过程叫做反向求导:
    ![![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212175518e_16,color_FFFFFF,t_7,t_70
    这里还有一个小技巧:各层间的权重theta原来是多个二维矩阵,我们可以把它们合在一起成为一个一维的向量,在需要使用时再还原为矩阵。这样做的优点是:传参数时只有一个固定的theta,而不是多个theta,鲁棒性更好。
  5. 使用数值计算的方法验证梯度是否计算正确,然后关掉验证的代码(否则会非常慢)
    在这里插入图片描述
  6. 使用梯度下降的方法得到使得J(θ)最小的参数theta
    梯度下降的方法还是和以前的一样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值