大家好, 欢迎回到深度学习课程｡
这是一个额外的教程来讨论软Mac和交叉熵函数｡
这并不是100%必要的, 你要完成我们在这一节的主要部分,
讨论的卷积神经网络的所有部分｡
但同时, 我认为这将是一个很好的除了你的袋子的知识和技能集｡
让我们继续深入研究这些函数｡
首先, 我们在这一节的主要部分建立了一个卷积神经网络, 最后它会给出0的概率｡
95为一只狗和0.
055或对于猫为5%｡
考虑到左边的照片作为输入, 这是在训练已经进行之后｡
这实际上是它在运行, 它在对某个图像进行分类｡
所以这里的问题是, 为什么这两个值加起来是1？
因为就我们所知, 从我们对人工神经网络的所有了解来看,
没有任何东西可以说这两个最终的神经元是相互连接的｡
那么他们怎么知道他们每个人的价值, 另一个的价值,
他们怎么知道把他们的价值加起来？
答案是, 在经典版的人工神经网络中, 它们不会｡
唯一的办法就是我们引入了一个特殊的函数, 叫做软极大函数, 来帮助我们摆脱这种情况｡
所以通常情况下, 狗和猫的神经元会有任何的真实的值｡
它们不必是B, 它们不必加起来是1｡
然后我们应用软最大函数, 写在上面, 它会使这些值在0和1之间,
它会使它们加起来等于1｡
引用维基百科的话,
源最大函数或归一化指数函数是逻辑函数的推广, 它将任意真实的数值的k维向量挤压成0到1范围内的实数值的k维向量, 这些实数值加起来等于1｡
所以基本上它做的正是我们想要的｡
它使这些值介于0和1之间, 并确保它们之和为1｡
它的运作方式是这样的, 这是可能的｡
是因为在这里的底部, 你可以看到有一个求和｡
所以它取指数, 把它放在Z的幂中, 然后把它加起来｡
所以Z1在所有的类中都是2, 所有这些值｡
这就是你的正常化过程｡
这就是软极大函数的工作原理｡
在卷积神经网络中引入一个软最大函数是有意义的, 因为如果你有一只狗和一只猫的可能分类, 对于狗类,
你有80%的概率, 对于猫类, 你有45%的概率,
那会有多奇怪｡
对不对？
这样说不通啊
因此, 当你引入这个偏最大函数时效果会更好,
这也是你会发现在卷积神经网络中大部分时间发生的事情｡
另一件事是, 软极大函数和交叉熵函数是紧密联系在一起的｡
这对我们来说非常方便｡
我们先来看看公式｡
这就是交叉熵函数的样子｡
我们实际上要用一种不同的计算方法｡
我们将使用这种交叉输入的表示法, 但结果基本上是一样的｡
这只是更容易计算｡
据我所知, 这听起来可能与现在的任何事情都没有关系, 只是屏幕上的公式,
但在本节的最后会有一些额外的推荐阅读｡
所以如果你不懂数学, 也不用担心, 就像我如果我们现在还没有解释数学.
但这里的重点是什么是交叉熵？
交叉熵函数｡
还记得我们以前在人工神经网络中, 我们有一个函数, 叫做均方误差函数,
我们用它作为评估网络性能的代价函数｡
我们的目标是最大限度地减少MSI, 以优化网络性能｡
这就是我们的成本函数｡
在卷积神经网络中, 我们仍然可以使用MSI, 但是在卷积神经网络中, 在应用了软最大函数之后,
一个更好的选择是交叉熵函数｡
在卷积神经网络中, 当你应用交叉熵函数时, 不再叫成本函数, 而是叫损失函数,
它们非常相似｡
它们只是在术语上有一点不同, 在含义上也有一点不同｡
但对于我们的目的来说, 这是几乎相同的事情｡
损失函数是我们想要最小化的函数, 以最大化网络性能｡
让我们看一个快速示例, 了解如何应用此函数｡
假设我们把一只狗的图像放到我们的网络中｡
犬的预测值为0｡ 9而且这是在训练期间｡
所以我们知道我们知道狗的标签｡
因此预测值为0｡ 9.
猫的预测值为0｡ 1.
然后这里我们有标签｡
所以我们知道这是一只狗, 因为这是训练, 一只狗, 零只猫｡
在这种情况下, 您需要使用｡
你应该把这些数字代入到交叉熵的公式中｡
那么你是怎么做到的呢, 把左边的值放到变量里？
在右边的对数下的那个, 右边的值会进入P, 所以记住哪个值在哪里很重要,
因为如果你把它们弄错了,
你不想从一个0值取对数, 或者从一个1取对数｡
所以你只需要把它们插进去, 确保你把它们插到正确的地方, 然后你基本上把它们加起来｡
这就是交叉记账的原理｡
我们现在要看一个具体的例子, 一步一步地, 在真实的生活中应用这个函数｡
这样交叉熵就更有意义了｡
我在这篇教程中的目的不是让你们更熟悉交叉熵,
因为它听起来很复杂, 没有双关语, 它可能像卷积神经网络一样, 听起来很复杂｡
好吧, 我知道了
很可怕, 但不是｡
这才是重点.
所以让我们继续应用它, 这样我们就知道它并不可怕｡
这是神经网络
这也解释了为什么我们要这么做, 为什么我们要研究不同的类函数｡
神经网络一, 神经网络二,
假设我们有两个神经网络, 然后我们传递一个狗的图像, 我们知道这是狗, 而不是猫｡
然后我们有另一张猫的图片这次是一只动物｡
是只猫, 不是狗｡
这是一只看起来很奇怪的动物, 如果你仔细看的话, 它实际上是一只狗, 而不是猫｡
所以我们想看看我们的神经网络是什么｡
在第一种情况下, 神经网络会预测一只90%狗10%猫｡
正确｡
神经网络二号60%狗40%猫仍然正确｡
更糟但正确｡
第二个选项第一个神经网络10%猫狗90%猫正确｡
你说的只是两只30%狗70%猫｡
更糟, 但仍然正确｡
最后, 神经网络一在图像中占三个神经网络一的40%｡
狗60%猫不正确的神经网络数字二10%狗90%猫不正确和更糟｡
所以这里的关键是, 即使两个网络在最后一个都错了, 通过所有三个图像, 神经网络,
一个比神经网络二更好｡
所以即使在最后一个例子中, 它给了狗40%的机会, 而神经网络只给予狗10%的机会｡
因此, 与神经网络2相比, 神经网络1的整体表现更好｡
现在, 我们将了解一下我们已经讨论过的用于衡量性能的函数｡
让我们把这些放到一个表中｡
这是第一个神经网络
你有了行号, 这就是图像的编号｡
第一张图, 和预测一样, 90%狗, 10%猫
这些是帽子变量, 然后是实际值.
是这样｡
狗正确｡
分类不正确｡
二号图像也是一样三号图像也是一样二号神经网络也是一样
所以在第一张图片中狗占60%, 猫占40%, 这就是它预测的｡
正确答案是狗而不是猫等等｡
现在让我们看看我们实际上会得到什么样的误差｡
那么, 我们可以计算哪些误差来估计网络的性能并监控网络的性能｡
有一种错误叫做分类错误, 基本上就是问, 你做对了吗？
不管可能性有多大, 问题是你做对了还是没有做对？
所以在这两种情况下, 对于两个神经网络, 他们每个人, 他们得到一个左右｡
这是他们错了多少｡
所以他们三分之一都错了｡
因此, 神经网络1的错误率为33%, 神经网络2的错误率为33%｡
所以从这个角度来看, 两个神经网络的表现基本上是一样的｡
但我们知道那不是真的｡
我们知道神经网络1的性能优于神经网络2｡
这就是为什么分类误差不是一个很好的衡量标准, 特别是对于不同的反向传播均方误差而言｡
顺便说一句, 我在Excel中做了这些计算｡
我只是不想让你觉得无聊｡
但你完全可以坐下来, 在纸上或Excel中做｡
这些都是非常简单的计算｡
基本上就是取误差平方和, 然后取观测值的平均值｡
差不多就是这样了｡
所以对于神经网络, 你得到25%｡
对于神经网络, 2, 您得到71%
错误率｡
如你所见, 这个更准确｡
它告诉我们神经网络1的错误率比神经网络2低得多, 然后又是交叉熵｡
我们已经看过公式了｡
你也可以这样算｡
这实际上比均方误差更容易计算｡
交叉误差交叉熵为神经网络1和1提供了38% 06用于神经网络二｡
所以你可以看到, 当你这样看的时候, 结果有点不同｡
当你看均方误差和交叉熵时, 为什么要用交叉熵来代替均方误差的问题,
不仅仅是像它们吐出的数字那样｡
这些计算只是为了告诉你这是所有可行的｡
你可以写在纸上｡
这不是这些不是很激烈的数学｡
这些都是非常非常简单直接的事情｡
但问题是, 为什么要用平均交叉熵来代替均方误差呢？
这是一个非常非常好的问题｡
我很高兴你问了｡
这个问题的答案是交叉熵相对于均方误差有几个优势, 但这些优势并不明显｡
我会提到几个, 然后我会告诉你在哪里可以找到更多｡
其中之一是, 如果, 比如, 你在反向传播的最开始,
你的输出值非常非常非常非常小｡
所以它比你想要的实际值要小得多｡
然后在最开始的时候, 梯度下降的梯度会非常非常低, 这是不够的｡
神经网络很难真正开始做一些事情, 开始移动, 开始调整这些权重,
并开始朝着正确的方向移动｡
而当你使用交叉熵这样的东西时, 因为它包含了对数, 它实际上可以帮助网络评估哪怕是这样一个小错误,
并采取措施｡
下面是如何思考它｡
所以让我们再说一遍, 这是非常直观的方法｡
这将是一个与数学的联系, 你可以通过数学推导出这些东西的细节,
但这是一个非常直观的方法｡
假设你想要的结果是一｡
而现在你是1的1/1000000, 对吧？
一个0｡ 000001.
下一次你的结果从百万分之一提高到千分之一｡
如果你计算平方误差, 你只需要把一个从另一个中减去, 或者基本上在每种情况下你都在计算平方误差,
当你把一个情况和另一个情况比较时, 你会看到平方误差｡
变化不大｡
从均方误差来看, 网络并没有得到很大改善｡
但是如果你看交叉熵, 因为你取对数,
然后你比较两者除以另一个, 你会发现你实际上已经大大改善了你的网络,
所以从百万分之一到千分之一的均方误差将非常低｡
它将是无关紧要的, 它不会它不会引导你的梯度提升过程或你的反向传播在正确的方向｡
它会它会引导它朝正确的方向前进, 但它会像一个非常缓慢的引导｡
它没有足够的能量｡
而如果你通过交叉熵来做, 交叉熵会明白, 哦,
即使这些是非常小的调整, 从绝对意义上说, 只是做了一个微小的改变, 从相对意义上说, 这是一个巨大的进步,
我们肯定在朝着正确的方向前进｡
我们继续走吧｡
所以交叉熵会帮助你的神经网络走向正确, 到达最优状态｡
这是让神经网络达到最优状态的一种更好的方法｡
但请记住, 这只在交叉熵仅是分类的首选方法时才起作用｡
所以如果你在谈论回归, 就像我们在人工神经网络中所做的那样,
那么你会更愿意相信我和平方误差｡
而交叉熵更适合于分类, 这也是因为我们使用了软mac函数｡
这是一种直观的解释｡
这是一个学习更多相关知识的好地方｡
如果你真的感兴趣, 为什么我们要用交叉熵和均方误差？
Geoffrey欣顿的Google视频称之为软最大输出函数, 他解释了它｡
很好, 我很好
作为深度学习的教父, 谁能更好地解释它呢？
顺便说一句, 杰弗里·欣顿的任何视频都是黄金｡
他只是在解释问题上很有天赋｡
总之, 这就是软最大值和交叉熵的关系｡
我希望这能让你们对这里发生的事情有一个直观的理解,
但更重要的是, 你们不会被交叉熵这个术语吓倒, 因为阿德隆会在实践教程中提到它｡
我想确保你对此有所准备｡
这只是计算损失函数的另一种方法, 也是优化网络的另一种方法,
它是专门为分类问题量身定制的, 因此是卷积神经网络,
它与软最大函数是相辅相成的｡
如果你想了解交叉熵, 如果你对交叉熵更感兴趣的话, 我会给你一些补充阅读｡
当然, 有一篇很好的文章值得一读, 叫做《交叉熵损失的友好介绍》, 作者是Rob de Pietro｡
2016年这里是下面的链接.
非常非常好｡
非常柔软｡
什么都没有？
不, 不, 不, 不
超级复杂的数学｡
好的比喻就是好的例子｡
用汽车的类比, 你看着汽车, 谈论信息, 比特和限制｡
你会怎么编码呢？
你会怎么编码？
这是一篇值得一看的好文章｡
我们给予你们一个很好的交叉熵的概述｡
从入门的角度来看, 如果你想深入研究像这里所看到的那样繁重的数学, 那么请查看一篇文章或一篇博客, 作者是How to
implement a Neural Network｡
间奏曲, 所以间奏曲就像是, 一个中间的东西, 就像是一个间歇,
就像当你去剧院的时候, 你在第一部分和第二部分之间有一个休息｡
因为他要经历所有这些步骤, 然后他说, 哦, 我得先解释一下｡
是的, 所以这就是为什么它被称为间奏｡
据我所知, 没有其他原因｡
这篇文章是由彼得罗林斯2016年以及｡
所以这两个都是最近的事｡
是的, 如果你想深入研究交叉熵背后的数学原理, 看看这个, 实际上在这篇文章中,
在软最大值和交叉熵背后｡
好了, 我们走吧｡
这就是他们两个的全部｡
希望我能够增加一些额外的清晰度和祝你好运｡
这将是有趣的, 享受实用教程.
下次再见
在此之前, 请尽情享受深度学习｡