首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从机器学习到深度学习

昨天简单介绍了一下机器学习,今天就开始讲一下机器学习中的神经网络的基本概念,这也是深度学习的最初起源。

传统的神经网络

传统的神经网络由输入层,隐藏层,输出层组成

输入层负责输入数据,以上面的鸢尾花数据为例。鸢尾花数据有四个属性,也就是说我们需要输入4个数据,例如 [ 0.05,0.14.0.12.0.20 ]。因此输入层有四个节点。上图的神经网络输入层有三个节点。输入层的这三个节点会与后面的隐藏层的节点相关联,通过计算得到隐藏层1的四个节点。那么这种计算关系是什么样的呢?

前向传播

举例: i1 是输入层的第一个节点,h1是隐藏层的第1个节点,h2是隐藏层的第二个节点。o1是输出层的第一个节点,o2是输出层的第二个节点,w为神经网络各层之间的参数。

那么h1=f(W1*i1 + W2*i2+ b1)

F是激活函数,用来增强神经网络的非线性。常用的激活函数是f(x)=1/(1+e^x)

由此,我们还可以得到h2=f(W3*i1 + W4*i2+ b2)

以此类推,得到h1,h2后还可以得到o1,o2。

通过前向传播计算,我们得到了神经网络的输出,然而这种输出结果通常和期望值有很大的区别。因为关于参数w在一开始都是随机生成的,能得到期望值就怪了。但是神经网络可以不断调整自己的参数w,使得输出结果不断的接近期望值。如何实现呢?首先要定义损失函数,也就是目前的输出值和期望值的差别有多少。

损失函数

损失函数用来计算当前网络的输出值与期望目标之间的差距,这个差距将用于更新w参数,从而进一步减小网络输出值与期望目标之间的差距。

常用的损失函数有交叉熵,MSE(均方差)等

交叉熵:

其中y是期望的输出值,a是实际的神经网络输出值,交叉熵主要用于分类任务,因为分类任务中的输出是离散型的。

MSE:

MSE中需要将神经网络的期望输出observed,和实际输出predicted相减求平方和,因此MSE主要用于回归任务(回归任务中的输出是连续值)

通过损失函数我们可以得到目前神经网络的输出值和期望值的差距。

梯度下降法

有了损失函数,我们接下来要使用梯度下降的方法,调整参数。首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

反向传播

之前我们定义了损失函数,解释了梯度下降法,在反向传播中,就是应用梯度下降法,求各个参数w对损失函数的梯度,然后向梯度的反方向更新w参数,从而达到减小网络的输出值和期望值之间的损失函数值。

参数的更新公式是:

J(θ)是损失函数,θj是神经网络中的参数w,每一个参数θj都要减去α乘以它对于损失函数的导数。

这样神经网络就完成成了从前向传播得到输出结果,然后使用输出结果计算损失函数,最后更新参数w,从而实现了对于输入数据的学习。就这样不断的输入新的数据进行学习,经过大量数据的训练之后,神经网络的输出值就可以不断的接近期望值。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215G0Z53M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券