文章部份内容参考自captainbed.nethtml
[TOC]算法
神经网络三个基础问题
经过三个基础问题引入神经网络很是基础且重要的三个函数。markdown
神经网络如何预测的?
神经网络经过逻辑回归函数进行预测,又成预测算法。网络
⭐️逻辑回归函数
神经网络的预测过程的公式为
z=dot(w,x)+b。app
其中
w表示网络中的一系列权值,
x表示输入的训练集,
dot(w,x)表示将
w和
x进行向量相乘。b表示阈值[yù zhí],用来影响预测结果。逻辑回归函数中,神经网络预测的是否准确就由
w和
b决定。机器学习
⚠️这里的
w实际上应该是转置矩阵
wT,线性代数要求行*列ide
举三个小例子来理解一下这个公式⬇️函数
- 假设周末即将到来,你据说在你的城市将会有一个音乐节。咱们要预测你是否会决定去参加。音乐节离地铁挺远,并且你女友想让你陪她宅在家里搞事情,可是天气预报说音乐节那每天气特别好。也就是说有3个因素会影响你的决定,这3个因素就能够看做是3个输入特征。那你到底会不会去呢?你的我的喜爱——你对上面3个因素的重视程度——会影响你的决定。这3个重视程度就是3个权重。
- 预测图片里有没有猫也是经过上面的公式。通过训练的神经网络会获得一组与猫相关的权重。当咱们把一张图片输入到神经网络中,图片数据会与这组权重以及阈值进行运算,结果大于0就是有猫,小于0就是没有猫。
- 不少网站都会记录下你平时的浏览喜爱,而后把它们做为权重套入到上面的公式来预测你会购买什么。
⚠️权重w和偏置b有点相似输入和输出之间联系的强弱。工具
激活函数——以sigmoid函数为例
在实际的神经网络中,咱们不能直接用逻辑回归。必需要在逻辑回归外面再套上一个激活函数。激活函数很是很是重要,若是没有激活函数那么神经网络的智商永远高不起来。 激活函数又分好多种,目前只给你们简单介绍一种叫作sigmoid的激活函数。oop
其公式为
σ(z)=1+e−z1,图像以下:
先只介绍它的一个用途——把z映射到[0,1]之间,方便理解预测结果。上图中的横坐标是z,纵坐标咱们用y’来表示,y’就表明了咱们最终的预测结果。从图像能够看出,z越大那么y’就越靠近1,z越小那么y’就越靠近0。那为何要把预测结果映射到[0,1]之间呢?由于这样不只便于神经网络进行计算,也便于咱们人类进行理解。例如在预测是否有猫的例子中,若是y’是0.8,就说明有80%的几率是有猫的。
预测结果
逻辑回归函数和激活函数结合使用,结合上述,预测结果公式以下:
⎩⎪⎪⎨⎪⎪⎧z(i)=dot(wT,x(i))+bσ(z(i))=1+e−z(i)1y^(i)=σ(wTx(i)+b)
其中==
y^(i)是预对于训练样本
x(i)的预测结果==。
神经网络预测的准确吗
只有可以判断预测的是否准确,才能不断改进、优化算法。神经网络中==损失函数(loss function)负责判断预测是否准确==。损失函数是机器学习中最为基础、最为重要的一环。
损失函数的做用
损失函数有不少种,但其做用都是用来衡量模型模型预测的好坏,通俗来说就是尽量用一个合理的公式来体现预测与实际数据的差距程度。
换一种学术点的说法,就是衡量两个分布之间的距离,一个分布是原始分布、正确的分布(ground truth),而另外一个分布是预测的分布、模型拟合的分布(prediction)。
理解损失函数可以对后续优化工具(梯度降低等)进行分析和理解。损失函数须要具体问题具体分析,不少时候最难的地方就是如何写出复杂的损失函数。
损失函数举例
结合初中学过的方差,最容易想到的一个差平方的损失函数公式以下:
L(y^(i),y(i))=21(y^(i)−y(i))2
其中==
y^(i)表示对训练样本
x(i)对预测结果,
y(i)表示实际结果==,这个相似方差的差平方公式很是好理解,两者的差越小,说明预测的越精准,结果也就越小。但实际上==这个公式并不能使用==。
实践中咱们可能使用的一个损失函数以下:
L(y^(i),y(i))=−(y(i)log(y^(i))+(1−y(i))log(y^(i)))
具体这样作的数学细节咱们暂且不考虑,但他们的目的是同样的。
成本函数
针对整个训练集的损失函数称为成本函数(cost function),公式以下:
J(w,b)=m1∑i=1mL(y^(i),y(i))=m1∑i=1m(y(i)log(y^(i))+(1−y(i))log(y^(i)))
该公式其实就是对每一个训练集的损失函数进行累加并求平均值,==计算结果越大,说明成本越大,即预测越不许确==。
神经网络如何学习
解决了神经网络如何预测、预测的是否准确后,下一步天然就是神经网络如何学习,即如何让本身的预测变得愈来愈准确。神经网络的学习就是要告诉电脑,如何改变权重和偏置来控制联系的强弱。
损失函数与梯度降低
前文所述,神经网络预测的是否准确,由
w和
b决定,那么==“学习”也就是找到合适的
w和
b==,梯度降低算法(gradient descent)就能够实现这个过程。梯度降低算法会逐步地改变
w和
b的值,使得新的
w和
b逐步让损失函数的值愈来愈小,从而最终达到预测更加精准的目的。
咱们来整体回顾一下以前学过的公式:
⎩⎪⎪⎨⎪⎪⎧y^(i)=σ(wTx(i)+b)σ(z(i))=1+e−z(i)1J(w,b)=m1∑i=1mL(y^(i),y(i))=m1∑i=1m(y(i)log(y^(i))+(1−y(i))log(y^(i)))
其中输入的训练集
x和输出的实际结果
y都是固定的,因此==损失函数
J(w,b)能够理解为一个关于
w和
b的函数==。"学习"也就是找到最合适的
w和
b,使得损失函数最小,即结果最精准。 ⬆️损失函数的数学意义
损失函数的图像以下:

可见损失函数实际上就像一个漏斗同样(凸函数),而咱们的目的也就是是的找到那个“漏斗底部”的
w和
b(极值),使得
J(w,b)最小。
梯度降低的原理
梯度降低算法经过梯度降低,逐步更新
w和
b使得逐步逼近最小值,过程以下:

为方便理解,咱们先假设损失函数只有一个参数
w且
w是一个实数(实际上
w是一个向量),咱们经过下列公式改变
w的值:
w′=w−r∗dw
w′是新的
w的值,
dw是损失函数
J关于
w的偏导数,即关于
w的斜率。
r是一个参数用来表示学习率(learning rate)。
⬇️数学意义 因为
J是一个凸函数,即单调函数,因此其关于
w的偏导数必定大于0,且单调性与
J保持一致,值还必定比
J小,咱们就能够利用其这些数学特性来使得它逐步减少逼近
J的极值,
r用来调节速率,当
r过大时
w′也有可能变为负值,此时就说明“学习过头了”。若是
r不合适,
w的值可能一直在最小值附近来回跳。因此说==找到一个合适的
r的值对梯度降低很是重要==。 ⬆️看不懂去翻翻高数课本,凸函数的性质。因而可知为何说算法岗都是调参侠,由于参数过重要了。
更进一步的原理强烈推荐看一下这个视频。