参考:https://blog.youkuaiyun.com/honghu110/article/details/55211228
https://blog.youkuaiyun.com/crxk_/article/details/97137789
神经网络
神经网络就是一个”万能的模型+误差修正函数“,每次根据训练得到的结果与预想结果进行误差分析,进而修改权值和阈值,一步一步得到能输出和预想结果一致的模型。
举一个例子:比如某厂商生产一种产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,从而生产出让消费者更满意的产品。这就是神经网络的核心。
神经网络的本质
机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定一些样本点,用合适的曲线揭示这些样本点随着自变量的变化关系。
深度学习同样也是为了这个目的,只不过此时,样本点不再限定为(x, y)点对,而可以是由向量、矩阵等等组成的广义点对(X,Y)。而此时,(X,Y)之间的关系也变得十分复杂,不太可能用一个简单函数表示。然而,人们发现可以用多层神经网络来表示这样的关系,而多层神经网络的本质就是一个多层复合的函数。
说白了,深度学习就是弄出来一个超级大的函数,这个函数含有海量的权值参数、偏置参数,再通过一系列复合的复杂运算,得到结果。
时间万物,可以抽象成数学模型,用数字来表示,深度学习网络就是对这些数字进行各种数学运算,计算得到人们期望的结果。
关于损失函数:
在训练阶段,深度神经网络经过前向传播之后,得到的预测值与先前给出真实值之间存在差距。我们可以使用损失函数来体现这种差距。损失函数的作用可以理解为:当前向传播得到的预测值与真实值接近时,取较小值。反之取值增大。并且,损失函数应是以参数(w 权重, b 偏置)为自变量的函数。
训练神经网络,“训练”的含义:
它是指通过输入大量训练数据,使得神经网络中的各参数(w 权重, b 偏置)不断调整“学习”到一个合适的值。使得损失函数最小。
如何训练?
训练的过程就是调整参数使损失函数最小。
* 策略1:随机寻找(不太实用)
最直接粗暴的方法就是,我们尽量多地去试参数,然后从里面选那个让损失函数最小的参数组,最为最后的W。
* 策略2:随机局部搜索
在现有的参数W基础上,随机搜索一下周边的参数,查看有没有比现在更好的W,然后用新的W替换现有的W,不断迭代。
* 策略3:梯度下降
损失函数为凸函数时,找到最陡的方向,逐一小步,然后再找到当前位置最陡的下山方向,再迈一小步…
梯度下降
以线性回归为例,对于假设函数(这里假设的函数就是神经网络):
构造损失函数:
对损失函数求偏导使其最小化
得到参数
反向传播
反向传播算法是神经网络中最有效的算法,其主要的思想是将网络最后输出的结果计算其误差,并且将误差反向逐级传下去。可以理解为求解梯度的一种方法,前一层的参数需要后一层的参数帮助求解。
例如如图所示神经网络
假设第一个神经元的表达式为 , 第二个神经元的表达式为
,那么实际上第一个神经元的输出是第二个神经元的输入,也就是第二个表达式中的
。对于训练这个模型首先采用前向传播算法(也就是按步骤计算得出输出结果):
对于输入x1 计算:
假设输出结果计算后得到
构造代价函数为:
综上,损失函数用梯度下降求解,求解梯度下降需要用到反向传播