王木头课程
卷积
右下角是卷积公式
形象的讲,f(x)表示我的进食量,即左上角这张图,每一个时刻都在吃进不同量的食物,g(t)表示某食物经过t小时后,在肚子里还剩下多少(比例)。那么卷积实际上就是求每一个时刻都在进食,且肚子里的食物在不断消化的情况下,任意时刻时,肚子里还剩下的食物。f(x)g(t-x)相乘表示之前某一时刻吃下的食物现在还剩下多少,因为g表示比例,所以相乘。然后再求积分表示求过去所有时刻的总和。
判断该公式是否是卷积的一个重要标志是,f()g()两个函数中变量相加后,是否能消去一个,x+(t-x)=t
下面我们看看x和t-x在图像上对应的是什么:
可以看到,x和t-x对应的是f()与g()的连线,T时刻的食物刚刚下肚,所以f(T)对应的是g(0),以此类推,越往前吃下的食物对应g的越往后的位置。按我的理解,这个图画的好像不严谨,因为现在是T时刻,所以f(0),下面对应的应该是g(T)。
卷积:如果有一个系统,其输入时不稳定的,但响应输出是稳定的,那么就可以用卷积公式来求该系统的存量。
如果要理解图像处理(注意这里是数字图像处理,而非卷积神经网络)中的卷积核对图像的操作具体代表什么,还需要对卷积有一个更宏观的定义:实际上卷积运算是求某一件事情发生时,不同时刻发生的事情对他的影响(贡献),或者说某一点发生了一件事情,其他位置上所有点对他的影响。
那么卷积核其实就是规定了某一个像素点它周围一圈像素点对它的影响,3*3的卷积核对九个数进行处理,然后得到下一层的输出,但注意这个输出位置在最中心的那个点上,具体如何影响,就是由卷积核的数值规定。
所以卷积核就是g函数,图像输入就是f,如果用公式严谨描述的话,卷积核实际上是g函数的翻转,因为从卷积操作的公式定义上看,g函数的操作与输出其实是一百八十度翻转的,但我们看到的卷积核是直接扣在图像上计算的。
到了卷积神经网络这,卷积核的作用是挑选和过滤特征,通过神经网络学习的过程,卷积核的参数学习实际上是中间像素点对周围像素点的试探和选择,保留有用的特征剔除没有用的。其实这都是老生常谈了,也没有什么深入和新颖的东西,ann rnn cnn transformer做的不都是这件事情吗
损失函数
这里提到了最小二乘法、极大似然估计、交叉熵三个概念
最小二乘法:用于拟合曲线,根据我现在的理解貌似是先写出假设函数的形式来,然后会有一个类似损失函数的误差,最小化误差来求参数。对于最小二乘法来说,直接对参数求导,然后通过导数=0来直接求取使得损失函数最小的参数,其结果只能是求出来了(有解)和无解两种情况。对比来说,梯度下降法是先随便给一组参数,然后通过梯度的反方向进行参数修正,给出一个最优点。梯度下降法适用面比较广,因为最小二乘法可能解不出来解析解。但是最小二乘法能直接给出全局最优解,梯度下降法只是逐渐逼近,而且有可能是局部最优解。怪不得吴恩达机器学习最开始的课讲的东西叫线性回归,其实就是这一套东西。
似然值:现实世界的X事件已经发生,然后我们假设了一些概率模型,在A模型下X发生的概率P,就称为A模型的似然值。我们在一堆模型ABC中选出似然值最大的,作为事件X的概率模型,就是极大似然估计法。所以我们用神经网络的概率模型去逼近真实世界的概率模型,就是极大似然估计的过程。
这里作者的意思应该是对于回归问题来说,损失函数是从最小二乘法得到的,因为都是拟合曲线的问题。对于分类问题来说,损失函数是从极大似然估计法推出来的,因为实际上模型是根据输入来判断其结果是0和是1的概率。
在讲交叉熵之前王木头说了一个定律(真实世界的发现)和定义(人为定义)的区别,例如我们熟知的惯性力F=ma,其实应当严谨的写为F:=ma,这是一个定义,是牛顿创造的。因为力的大小在数值上等于多少是无所谓的,他的确和ma有正比关系,但前面其实可以带任意系数的。所以为了简便,牛顿定义了力F在数值上刚好等于质量乘以加速度。牛顿以惯性力的定义为基础,推出万有引力公式F=GM1M2/R2,注意这里就没有那么漂亮了,而是添加了一个万有引力常数G。我们也可以把万有引力写的漂亮一点,再把系数项放在惯性力的公式中。这里王木头还说了一句话,但我不能完全参透:力还可以有各种各样的定义,比如F=ma2只是这样目前这样的定义比较简洁,也可以在整个力学体系中自洽。(这个a2我不是很理解,我觉得给a加个平方,那质量和加速度对力的贡献就会不一样了,现实世界会满足这样的方程吗)
而在信息论中:
f(x):=信息量,这个信息量如何定义也是可以有无数种方式,但需要满足下面这两个条件(也就是说括号中的时间概率相乘,要等与外面事件概率相加,括号中的数值表示这件事发生的概率),才能在这个系统中自恰,所以引入了log,log具有这样的计算特性。至于为什么信息量=信息量+信息量,因为信息量是有量纲的,左边的东西等于右边的东西,只能用相加。如果右边用了相乘,其量纲也变成了平方,左边应该是另外一个东西了。我们回想一下,带有量纲的物理量在相乘的时候,通常是变成了另外一个量而不可能还是自己。同时,概率可以相乘是因为概率没有量纲,概率=概率×概率是没问题的。从逻辑上也好理解,阿根廷进决赛的信息量+阿根廷赢了决赛的信息量=阿根廷夺冠的信息量。而概率上同时发生的事情应该概率相乘。
同时,一件事情发生的概率越小,但他发生了,这样的事情所带有的信息量是越大的。概率越大的事情发生是自然而然的,这件事情发生所携带的信息量应该比较小。但是我们知道log是单调增函数,所以log前面再带一个负号,就可以表示概率越小信息量越大。
所以就得到了这样的信息量计算公式,这里还有一个问题就是log以几为底比较合适,其实无所谓了。但是以2为底也有他的意义,它的单位正好是比特,例如一件事情发生的概率是1/1024,那这件事情发生以后的信息量就是10bit。从另一个角度讲,16位的二进制位上,一个具体数字出现的概率是1/216,这个数字给出来以后,他的信息量就是16bit,即这个数字需要16bit去表示(当一个事情可能发生的结果太多的时候,才需要更多的比特位来表示这件事情,如果只是抛硬币,那么一个比特位就足够表示抛硬币的结果了,当然信息量也就比较少)。
熵不是衡量某一个具体事件,而是衡量整个系统里所有事件,即一个系统的状态从不确定到确定的难度有多大。我们用较大的熵表示这个系统的不确定性比较大,较小的熵表示这个系统的确定性比较大。所以熵也可以理解为混乱程度。
熵是由该系统每一个事件发生后所携带的信息量相加所得到。但如上图所示,左边是两个水平相当的国家比赛,右边是两个水平相差悬殊的国家比赛。但是可以看到中国如果赢得比赛的信息量是巨大的,但是因为这件事情发生的概率极低,所以求熵时还需要带上每件事情发生的概率,然后再相加,就可以求得左边系统的熵是比较高的,其结果比较不确定,右边系统的熵非常低,其系统较为稳定。以上计算方法其实就是数学期望,所以我们将系统的熵定义为该系统的期望。
(这里有一部分笔记因为没保存丢失了,我大概总结一下内容吧,毕竟我也不做分类问题,交叉熵损失函数主要针对分类问题)
KL散度(即相对熵)是两个概率系统之间的差别,从公式上看就是每一个具体事件的信息量只差再求数学期望,将这个定义公式展开以后,会变成两项相减,后一项是作为基准的概率模型的熵,前一项我们就定义为两个系统的交叉熵。显然,不管基准模型和谁比,他自己的熵是不变的,所以想让两个对比的概率模型尽可能的相近,需要最小化交叉熵。那么交叉熵本身就可以作为损失函数。因为神经网络实际上就是一个系统,他要想办法去接近我们理想中的那个标准系统。在交叉熵公式变为损失函数的过程中,有些东西要根据实际情况替换一下,毕竟交叉熵本身和损失函数是不同的东西。如果做分类问题的话再细看吧