笔记来源于:

床长人工智能教程
吴恩达深度学习deeplearning.ai

 上一篇文章,我们初步了解到了神经网络的原来,神经网络是怎么一回事儿神经网络的分类以及数据是以何种形式传入神经网络,下面我们来介绍神经网络其他背后的逻辑。

神经网络是如何进行预测的

Logistic 回归

 在上一篇文章,上面我们知道了数据是通过什么样的方式来输入到神经网络中去的,就好比我举出来的例子,我们把图像抽象为三层叠加的矩阵,三个矩阵分别代表着红绿蓝,矩阵的每一个单位代表着该颜色在像素点的值,三种颜色,不同的值构造出同一个像素点,n 个像素点就构成了图像,图像以这样的方式传入神经网络,供神经网络来学习。那么,另外一个问题来了,神经网络是如何进行预测的呢

 这个预测的过程其实只是基于一个简单的公式,这里我们在引入上篇文章的神经元图片。

z=dot(W,X)+bz = dot(W,X) + b z=dot(W,X)+b

 其实在逻辑回归公式中,W 其实应该写成 WT,因为实际运算中我们需要w的转置矩阵。这里为了简化理解,后面会详细给大家介绍的

 其实这个公式蛮简单的, 大家不要想复杂的,x 代表着输入特征向量,假设只有3个特征,那么x就可以用(x1,x2,x3)来表示。如上图的神经元。w表示权重,它对应于每个输入特征,代表了每个特征的重要程度。b表示阈值[yù zhí],用来影响预测结果。z就是预测结果。公式中的dot()函数表示将w和x进行向量相乘。我们现在只需要知道上面的公式展开后就变成了这样

z=dot(w,x)+b=(x1∗w1+x2∗w2+x3∗w3)+b。z = dot(w,x) + b = (x1 * w1 + x2 * w2 + x3 * w3) + b。 z=dot(w,x)+b=(x1∗w1+x2∗w2+x3∗w3)+b。

 下面我通过一个实例来帮助大家理解这个公式。

 假设周末即将到来,我知道古天乐要来我的城市拍戏。作为我的男神,我一定要去看的,然后我待着没事,搞了一个神经网络要预测我是否会去拍古天乐的剧组。但是拍戏的地点离我住的地方挺远,而且我女朋友想让你陪她宅在家里搞事情(假想我就有女朋友),但是天气预报说拍戏的那天天气特别好。

 分析:也就是说有3个因素会影响我的决定,这3个因素就可以看作是3个输入特征。那我到底会不会去呢?我的个人喜好——我对上面3个因素的重视程度——会影响我的决定。这3个重视程度就是3个权重。

 如果我觉得地点的远近无所谓,并且已经精力衰竭不太想搞事情了,而且我知道,见到古天乐本人的机会也许就这一次,那么神经网络将预测我会去拍戏地点。这个预测过程可以用前面的公式来表示。

 我们假设结果z大于0的话就表示会去,小于0表示不去。又设阈值b是-5。又设3个特征(x1,x2,x3)为(0,0,1),最后一个是1,它代表了好天气。又设三个权重(w1,w2,w3)是(2,2,7),最后一个是7表示你很喜欢好天气。那么就有

z=(x1∗w1+x2∗w2+x3∗w3)+b=(0∗2+0∗2+1∗7)+(−5)=2z = (x1 * w1 + x2 * w2 + x3 * w3) + b = (0 * 2 + 0 * 2 + 1 * 7) + (-5) = 2 z=(x1∗w1+x2∗w2+x3∗w3)+b=(0∗2+0∗2+1∗7)+(−5)=2

 预测结果z是2,2大于0,所以预测你会拍戏地点看古天乐。

 但是如果我最近欲火焚身,并且对其它两个因素并不在意,那么神经网络预测我将不会拍戏地点。这同样可以用我们的公式来表示。设三个权重(w1,w2,w3)是(2,7,2),w2是7表示我有顶穿钢板的欲火。那么就有
z=(x1∗w1+x2∗w2+x3∗w3)+b=(0∗2+0∗7+1∗2)+(−5)=−3z = (x1 * w1 + x2 * w2 + x3 * w3) + b = (0 * 2 + 0 * 7 + 1 * 2) + (-5) = -3 z=(x1∗w1+x2∗w2+x3∗w3)+b=(0∗2+0∗7+1∗2)+(−5)=−3
 预测结果z是-3,-3小于0,所以预测你不会去,会呆在家里搞事情。(滑稽)

 预测一张图片里有没有猫也是通过上面的公式。经过训练的神经网络会得到一组与猫相关的权重。当我们把一张图片输入到神经网络中,图片数据会与这组权重以及阈值进行运算,结果大于0就是有猫,小于0就是没有猫。

 大家平时上网时有没有发现网页上的广告都与你之前浏览过的东西是有关联的?那是因为很多网站都会记录下你平时的浏览喜好,然后把它们作为权重套入到上面的公式来预测你会购买什么。

 上面那个用于预测的公式我们业界称之为逻辑回归,这个名字有点奇怪,大家记住就行了,只是个名字而已。

激活函数

 这里要稍微提一下激活函数。在实际的神经网络中,我们不能直接用逻辑回归。因为由上面的逻辑回归公式算出来的值,可能比1大得多,或者甚至可能是一个负值,那这样的得出的概率值,其实没有什么实际意义的,其实所谓的概率问题把数字数值控制在0和1之间即可,所以说必须要在逻辑回归外面再套上一个函数。这个函数我们就称它为激活函数。,激活函数非常非常重要,如果没有它,那么神经网络的智商永远高不起来。而且激活函数又分好多种。后面我会花好几篇文章来给大家介绍激活函数。那么在这里,我只给大家简单介绍一种叫做sigmoid的激活函数。它的公式和图像如下。

 我们在这里先只介绍它的一个用途——把z映射到[0,1]之间。上图中的横坐标是z,纵坐标我们用 y^\widehat{y}y​ 来表示,y^\widehat{y}y​ 就代表了我们最终的预测结果。从图像可以看出,z越大那么y^\widehat{y}y​就越靠近1,z越小那么y^\widehat{y}y​就越靠近0。那为什么要把预测结果映射到[0,1]之间呢?因为这样不仅便于神经网络进行计算,也便于我们人类进行理解。例如在预测是否有猫的例子中,如果y’是0.8,就说明有80%的概率是有猫的。

 那么,一个完整的逻辑回归函数就是如下图,显而易见的就是,我们要做的并不是研究 特征向量X,而是 学习参数 w 和 b ,这样 y^\widehat{y}y​ 就变成了一个很好的估计。

 因为人工智能这个领域概念多,且难理解,所以我在前面一些文章内删除掉一些较难的细节,这样其实能够更快帮助大家理解一些重要的理论部分。在后面的文章,我会根据教程内容,通过笔记慢慢地把他们给介绍出来,大家一起循序渐进的学习嘛!!

神经网络到底预测的准不准呢

损失函数(成本函数)

  从上面的文章,我们就了解到 神经网络是如何进行预测的 —— 可以通过逻辑回归之类的算法来对输入进行预测,那么又一个问题出现了,我得让神经网络的预测结果是准确的,或者说是无限接近百分百准确的,不然的话,这跟蒙题有什么意义。

 让神经网络自己判断预测结果是否正确,是很重要的一步。因为只有知道自己预测结果是否准确,才能够对自身进行调整,好让结果越来越准确,这就是学习的过程。 那么验证学习成果,就要需要损失函数(loss function) 出现了。


 这里我们把上面的逻辑回归公式的庐山真面目贴出来,如上图,y^\widehat{y}y​ 就是预测的结果,^ 角标指代某一个训练样本,例如 y^\widehat{y}y​ 是对于训练样本 x^\widehat{x}x 的预测结果。

 那么损失函数来衡量我们的预测算法做的怎么样——就是说衡量的是预测算法的预测精度高不高,就比如下面这个“差平方”公式。

 损失函数运算后得出的结果越大,那么预测就与实际结果的偏差越大,也就是说预测精度不高。我们可以看到这个"差平方’'公式,就是 y^ 越接近y,那么运算所得出的结果就越小,说明预测精度越高,损失最小,但是在实践中人们通常不会用这个“差平方”公式,因为当你学习这些参数的时候,你就会发现之后讨论的优化问题,最后会得到很多个局部最优解,其实我们想要的是一个全局最优解(具体原因在后面介绍给大家,现在为了方便大家理解什么损失函数),实践中我们使用的损失函数的公式是这样的。

 我们举几个例子来说明一下这个函数: 有这两种情况,第一种情况就是说,当 y = 1 时,L(y^(i),y^i)=−(y(i)log(y^(i)))L(\hat{y}^{(i)},\hat{y}^{i})=-(y^{(i)}log(\hat{y}^{(i)}))L(y^​(i),y^​i)=−(y(i)log(y^​(i))),因为第二项1−y1-y1−y等于0,所以说此时,如果你想让log(y^)log(\hat{y})log(y^​)够大的话,那么意味着,y^\hat{y}y^​尽可能的大,也就是,如果y=1y =1y=1,你会想让y^\hat{y}y^​尽可能的大,但是他永远不会大于1 ,为什么加上负号呢,在log函数里,自变量小于1的y^\hat{y}y^​得出的值,永远是负的,所以要加上一个负号。第二种情况就是 当 y = 0 时,L(y^(i),y^i)=−((1−y(i))log(1−y^(i)))L(\hat{y}^{(i)},\hat{y}^{i})=-((1 - y^{(i)})log(1 - \hat{y}^{(i)}))L(y^​(i),y^​i)=−((1−y(i))log(1−y^​(i))),在学习过程中,想让损失函数小一些,也就意味着,log(1−y^(i))log(1 - \hat{y}^{(i)})log(1−y^​(i)) 够大,因为有一个负号存在,损失函数让y^\hat{y}y^​尽可能的小。

 这个公式与“差平方”公式的作用是一样的,努力使损失函数的值越小就是让努力让预测的结果越准确。

 我们需要注意到上方的步骤,其实是我们对单个训练样本定义了损失函数,所谓单个训练样本就是一张图片,一段话…,那么下面这个公式就是用于衡量预测算法对整个训练集(n个训练样本的集合)的预测精度。

 其实,就是对每个样本的“损失”进行累加,然后求出一个平均值,这种针对于整个训练集的损失函数,我们称之为成本函数。它的计算结果越大,说明成本就越大,预测的也就越不准确。

 损失函数从严格意义上讲:是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或者“损失”的函数。在应用中,损失函数通常是作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。

 损失函数是机器学习里最基础也是最为关键的一个要素,通过对损失函数的定义、优化,就可以衍生到我们现在常用的机器学习等算法中。

 损失函数的作用就是衡量模型模型预测的好坏。再简单一点说就是:失函数就是用来表现预测与实际数据的差距程度。换一种说法就是衡量两个分布之间的距离:其中一个分布应当是原始分布,或者正确的分(groundtruth),而另一个分布则是目前的分布,或者模型拟合的分布(prediction)。损失函数是可以很好的反映模型与实际数据差距的工具,理解损失函数能够更好的对后续优化工具(梯度下降等)进行分析与理解。很多时候遇到复杂的问题时,其实最难的一关是如何写出合适的损失函数。

神经网络是如何进行学习的

梯度下降法

 前面的内容,我们知道 逻辑回归 用来表示神经网络 它是如何进行预测的,也知道了,损失函数用来衡量单一训练集的效果,也就是神经网络到底预测的准不准的问题,而从成本函数用于衡量参数 w 和 b 的效果,在全部的训练集上来衡量 。

 而且,我们在前面的文章中,其实我们可以发现,参数 w 和 b 貌似是不可获取的两个值,预测的结果是否准确,主要是由 w 和 b 决定的,因为在上面的公式中, 输入x 和 实际结果 y 都是固定的,只有w 和 b 是可以动态变化的。所谓的“学习”或者叫做是"训练神经网络", 就是找到一组 w 和 b,使得损失函数的值最小(损失函数值越小,预测结果就越准确),那么在神经网络中,就是通过梯度下降算法来寻找最优的w 和 b 的。

  上面的图,就是关于损失函数J 的形状,我们将 下面的两个轴定为 w 轴 和 b 轴, 那么在这里来看,w 和 b 会是一个实数值(这里方便大家理解),但是实际上,w 可以是一个更高维的表达形式,比如说矩阵。如图所示,损失函数J 的图像一个向下凸的图像(所以也称为凸函数),我们选择J函数作为损失函数也正是因为它是一个凸函数,因为我们从图中来看,我们在任意点对 w 和 b 进行初始化,那么通过梯度下降算法,这个值会不断向下更新,直到 w 和 b的值到达函数的最低端(这个最低端,我们称之为 全局最优值)这个位置就代表 神经网络找到了最合适的 w 和 b 的值。

 这里有同学就会问,为什么选择凸函数呢,下面的这个简略非凸函数的图像。
 我们就会发现,这样的非凸函数里,局部最优占据大部分,而且 梯度下降算法找的全局最优,所以单一的凸函数是最有效的,且最直接的。

 我们从二维平面上来看这个函数,方便大家理解,这里的J 函数只有一个参数 w (我们先忽略 b 的存在),且 w 是一个实数值。那么梯度下降算法其实就是重复操作:w′=w−r∗dJ(w)dww' = w - r * \frac{d{J(w)}}{d{w}}w′=w−r∗dwdJ(w)​ 这个公式来不停的更新 www 的值,rrr 用来表示学习率,更加贴切的说法是学习步长, 而dJ(w)dw\frac{d{J(w)}}{d{w}}dwdJ(w)​是对参数 www 的更新 或者变化量,简化后的公式就表示为:

w′=w−r∗dww' = w - r * d{w}w′=w−r∗dw

 结合上图中的函数图像,起初 www 是在初始位置,我们不要忘记导数的含义是函数在这个点的斜率,斜率 = 当前点所在的 高/宽高/宽高/宽 ,在当前点相切于 J(w)J(w)J(w)的一个小三角形,如图所示在最低点的右侧,导数是正的,此时, 新 www 的值 等于 旧 www 的值 -学习率 rrr 与 dJ(w)dw\frac{d{J(w)}}{d{w}}dwdJ(w)​ 求导的值。正因为导数为正,旧的值减去一个正数,那么 www 就会不断减小 ,在图像上就会不断向左移动,趋于最低点。相反,如果将 www 初始化在最低点的左侧,导数就是负的,那么 www 就会不断增加 ,在图像上就会不断向右移动,趋于最低点。 相当于 dwdwdw 导数的正负决定了,www 的移动方向。

w′=w−r∗∂J(w,b)∂ww' = w - r * \frac{\partial{J(w,b)}}{\partial{w}} w′=w−r∗∂w∂J(w,b)​
b′=b−r∗∂J(w,b)∂bb' = b - r * \frac{\partial{J(w,b)}}{\partial{b}} b′=b−r∗∂b∂J(w,b)​

 那么其实在原本 J(w,b)J(w,b)J(w,b) 是一个含有 www和 bbb 的函数,也就是说这个函数有两个自变量,在这种情况下,梯度下降的内循环就是上面的两个公式了。

 有人会说,那我每次都使 www 改变很多,那么就会更快的到达J(w,b)J(w,b)J(w,b) 的最小值处,此时 rrr 学习率(学习步长)就要起作用了,因为如果你每次让 www改变太多,那么可能会错过了J的最小值处,例如上图中你可能会从www的初始位置直接到了绿色小三角的位置(跳过了J的最小值处),之后你会左右来回跳,永远到不了J的最小值处,用它来控制 www 改变的步进,所以选择一个正确的学习率很重要。选错了,那么你的神经网络可能会永远找不到损失函数的最小值处,即你的神经网络预测得永远不会很准。

神经网络是如何进行预测的?相关推荐

  1. Chemistry.AI | 基于图卷积神经网络(GCN)预测分子性质

    GCN: Graph Convolutional Network(图卷积网络) 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit版本:RD ...

  2. Chemistry.AI | 基于循环神经网络(RNN)预测分子性质

    Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit版本:RDKit 2 ...

  3. Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性

    CNN :Convolutional Neural Networks (卷积神经网络 ) 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit ...

  4. 人工神经网络在行人轨迹预测上的应用

    简 介: 行人轨迹预测是缓解交通拥堵.优化智能汽车驾驶决策的重要依据,在自动驾驶和智慧交通上有着广泛的应用前景.但在交通场景中,行人的运动轨迹不仅会受到本身意图的影响,还会受到周围行人.车辆的影响,所 ...

  5. 广义回归神经网络(GRNN)的数据预测

    广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,   网络还可以处理不 ...

  6. 几何梯度分析神经网络中不可信预测性

    ©PaperWeekly 原创 · 作者 | 尹娟 学校 | 北京理工大学博士生 研究方向 | 随机过程.复杂网络单位 引言 该论文是关于深度学习理论性的文章,要知道深度神经网络经常会对样本分布之外的 ...

  7. 【转】人工智能-1.2.2 神经网络是如何进行预测的

    上一篇文章中我们已经知道了如何将数据输入到神经网络中.那么神经网络是如何根据这些数据进行预测的呢?我们将一张图片输入到神经网络中,神经网络是如何预测这张图中是否有猫的呢?? 这个预测的过程其实只是基于 ...

  8. 交通流预测python代码_Python 3 amp; Keras 实现基于神经网络的交通流预测

    交通流量预测在智能交通(ITS)系统中占有重要地位,是实现交通诱导的前提.准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用.随着交通数据采集技术的不断 ...

  9. 床长人工智能教程 - 神经网络是如何进行预测的?

    朋友们,如需转载请标明出处:http://blog.csdn.net/jiangjunshow 上一篇文章中我们已经知道了如何将数据输入到神经网络中.那么神经网络是如何根据这些数据进行预测的呢?我们将 ...

  10. 基于神经网络的房屋价格预测

    本课题的主要任务就是通过神经网络对房屋的价格进行预测,这里,我们采用的数据是奥克兰其中一个郊区的房屋价格的数据.在MATLAB中,使用load函数,将数据进行导入,可以看到房屋价格数据如图2.1所示. ...

最新文章

  1. php 怎么查看原生方法源码_怎么看电脑内存频率?这里有3种方法可以查看,新手分享...
  2. assume用法及意思_分享assume 的几种用法~
  3. 5.2.1 OS内核的I/O核心子系统及功能
  4. Divide by three, multiply by two(dfs)
  5. Codeforces Round #441 D. Sorting the Coins(模拟)
  6. java 需要class interface 或enum_阿里P8教你Java注解与反射
  7. (72)FPGA模块调用(VHDL调用Verilog)
  8. 全面理解Unity加载和内存管理机制之二:进一步深入和细节
  9. 1159 最大全0子矩阵
  10. html获取地理位置
  11. fb2 android,FBReader PDF plugin app
  12. mysql_帮助命令/通配搜索/help help用法(official doc)
  13. 学大数据专业未来应该怎么就业?有什么岗位?
  14. html圆圈男女,html圆形导航导航
  15. latex中文小标题_科学网—一个较为完整的中文图书Latex模板 - 张金龙的博文
  16. 电源知识——LDO线性电源、开关电源(基础)
  17. python中import string是什么意思_Python之string模块(详细讲述string常见的所有方法)...
  18. 哈尔滨工业大学2019年计算机复试线,2019年哈尔滨工业大学考研复试分数线信息分析...
  19. python 校验身份证号码 并输出对应省市县生日 demo
  20. scapy构造IP分片包

热门文章

  1. 波士顿动力开源代码_失去动力两年后,我如何开始开源之旅
  2. 大数据时代的数据特点与大数据时代处理数据理念的改变
  3. DM8:达梦数据库下载地址
  4. AutoCAD入门——常用指令
  5. InputStream 中available 的使用
  6. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!
  7. 牛客挑战赛42 B.小睿睿的伤害(树上启发式合并)
  8. Es5的几种继承方式
  9. Ubuntu显示WiFi信号强度
  10. 安装Java时出现错误2203_win7 office在安装过程中出错 错误2203(解决)