这张ppt熟悉神经网络的同学会非常了解,讲的是activation functions,也就是激活函数,神经网络说白了就是线性求和然后激活,就像初中学过的y=kx+b。区别仅仅在于 y是从y0到yn的向量,x从x0到xn的向量,定义的k 可能是从k00到Knn一个矩阵,做的一个比较高维度的y=Kx+b。在求和之后,y不可能直接输出,必须经过一个active方式来将其非线性化。因为神经网络每一个神经元所做的都是直接的乘法和加法,而乘法和加法属于一种线性的算法,学过链式法则的话我们可以知道,乘法和加法都属于线性算法,乘法和加法的组合仍然是线性的,为了保证我们的神经网络有更大的拟合程度,因为我们绝大多数的信号都是非线性信号,所以我们要将它非线性化,所以需要用到一个active function, 这里介绍 三种:sigmoid, tanh,ReLu.
Sigmoid激活函数是数学中常见的S曲线,不管数据x是从负无穷到正无穷,整个自定义域内,不管x是什么值,总能将值锁定在0和1之间。它在[-5 ,5] 区间性能比较好,但是一旦x<-5或者x>5,它的导数几乎就是0 ,因为神经网络用的都是反向传播,说白了也就是求导,根据导数来优化它的参数。一旦当x的输入比较大或者比较小的话,梯度就会下降不见了,在优化的时候会出现一个饱和的现象,如果采用sigmoid的话,需要对输入数据进行正则化,把输入值尽量压缩在[0,1]区间。
同理双曲正切(tanh)也像sigmoid函数一样,但是效果比较好的区间要远小于sigmoid,我们也需要把输入值尽量压缩在[-1,1]区间,与sigmoid不同之处是,双曲正切可以将数据压缩在[-1,1],而sigmoid是[0,1]
本文所用的 Relu是比较新的active方式 由y=x和y=0两段函数拼起来的,如果x>0的话,激活函数是y=x,如果x<0,直接让输出=0。这样的好处是:
1.不受定义域的影响, 正无穷和负无穷都可以用,不需要进行正则化处理,省略掉一个比较麻烦的步骤。
2. 它只考虑对神经元起正激励的部分,起负激励的部分就不进行修正,让神经网络往更好的方向发展,如果输入的信号对神经元有激励作用,我会让激励作用放大再放大。然后对于y=x,不管输入x是什么值,导数永远为1.
这个ppt上写的是max pooling 也就是池化,刚才在简单的介绍卷积网络的时候用到的池化。这里把每4个单元的像素点压缩成一个单元,原图像是4行4列,我们取其中的2行2列,变成了两行两列的图像。我们做的是全局的缩放,图像的基本特征得到保留,同时可以降低图像的维度。我在计算原图像输入的话,它有4*4 有16个像素点,用池化过的图像就只有2*2 4个像素点,这4个像素点还保留着16个像素点的特征。所以说随着卷积层不断的加深,输入图片会越来越多,计算量会增大,在保留图像基本特征的情况下对图像进行降维,这时候用的是max pooling,作用是下采样(down sample),也就是降低图像维度,来减少计算量。
这幅图像是一个例子。假设这个是我们已经处理过的卷积层输出,它变成了2*2的矩阵,我们把2*2层矩阵拉成1*4的数列作为输入,此时我们给它一个weight权重和bias偏置值,进行上面的y=Kx+b的过程,然后输出层有三个种类,在进行y=kx+b后,第一行的w*x+b 得到-96.8分,同理第二行和第三行可以得到437.9分和61.95分 以此类推,输出层选择的是得分最高的,让那个位置的神经元激活,通过三个输出层的分数可以看到第二个神经元得到了激活,但是很明显这个数据是不对的,第二层代表图像是狗,所以计算错误,首先x 是不能改的,只能改w和b。这是我们初中数学一样,y=kx+b,k和b跑偏了的话,是可以通过y和x的值代进去求,但是因为我们这边参数w和b值太多,我们没办法直接求出来,所以需要用到gradient descent 梯度下降法,用最优化的办法来寻找w和b的最优解。