昨天简单介绍了一下机器学习,今天就开始讲一下机器学习中的神经网络的基本概念,这也是深度学习的最初起源。
传统的神经网络
传统的神经网络由输入层,隐藏层,输出层组成
输入层负责输入数据,以上面的鸢尾花数据为例。鸢尾花数据有四个属性,也就是说我们需要输入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,从而实现了对于输入数据的学习。就这样不断的输入新的数据进行学习,经过大量数据的训练之后,神经网络的输出值就可以不断的接近期望值。
领取专属 10元无门槛券
私享最新 技术干货