来自《深度学习入门:基于Python的理论与实现》
张量
Numpy、TensorFlow、Pytorch等框架主要是为了计算张量或是基于张量计算。
标量:0阶张量;12,4,3,
向量:一阶张量;[12,4,3]
矩阵:二阶张量;[ [12,4,3], [11,2,3] ]
多阶张量:多维数组;
可以将张量的阶度理解为多维数组的维度。
神经网络
神经网络的图表示:
最左边的一列称为输入层,最右边的一列称为输出层,中间的称为中间层,也叫做隐藏层。
激活函数
概述
激活函数的作用在于决定如何来激活输入信号的总和。数学表达式如下:
图表示如下:
通常神经元用一个○表示,在明确神经网络的动作下,可以明确显示激活函数的计算过程。如下,这两个图是等效的。
sigmoid函数
神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送到下一个神经元。
函数表示为:
使用Numpy实现:
relu函数
relu函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。函数表示:
使用Numpy实现:
神经网络的实现
如下是三层神经网络的图表示,第0层神经元到第一层神经元的信号传递:
符号解释:
如下表示引入了偏置的神经元"1"。
神经元a1的数学表达式如下:
矩阵的乘法运算:
NumPy实现:
中间层(隐藏层)的激活函数可能是不一样的,如上可能是sigmoid函数或是rule函数计算。
第1层神经元到第二层神经元的信号传递,从下图也可以看出来,第二层到输出层的信号传递:
输出层的设计
神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数。
机器学习的问题大致分为分类问题和回归问题。分类问题是数据属于哪一个类别的问题。而回归问题是根据某个输入预测一个数值的问题。
恒等函数和softmax函数
恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动的直接输出。神经网络图表示:
分类问题中的softmax函数,其数学表达式如下,计算第K个神经元的输出:
图表示如下,输出层的各个神经元都受到所有输入信号的影响:
softmax函数的python实现:
softmax函数的输出是0.0到1.0之间的实数。并且softmax函数的输出值的总和是1。因此可以把softman函数的输出解释为"概率"。
损失函数
损失函数标识神经网络性能的"恶劣程度"的指标,即当前的神经网络对监督数据在多大程度上不拟合,在多大程度上不一致。损失函数的计算可以使用均方误差和交叉熵误差。
卷积神经网络
卷积神经网络(CNN)增加了卷积层(Convolution)和池化层(Pooling)。其神经网络结构示例如下:
之前的全连接神经网络中忽略了数据的形状,比如,输入数据是图像时,图像通常是高、长、通道三个方向上的3维形状。但是向全连接层输入时,需要将3维数据拉平为1维数据。全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一纬度的神经元)处理,所以无法利用与形状相关的信息。
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接受输入数据,并以3维数据的形式输出至下一层。因此,CNN架构的网络可以正确理解图像等具有形状的数据。
卷积层
卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的"滤波器运算"。如下示例:
卷积运算对输入数据应用滤波器。计算顺序如下,卷积运算以一定间隔的步幅滑动滤波器的窗口并应用。如下所示:
将各个位置上滤波器的元素与输入的对应元素相乘,然后再求和。最后将结果保存到输出的对应位置。将这个过程在所有的位置运算一遍,就可以得到卷积运算的输出。
3维数据的卷积运算
之前的卷积运算都是以高、长方向的2维形状为对象的。图像是3维数据,除了高、长方向还有通道方向。增加了通道,会按通道进行输入数据与滤波器的卷积运算。如下是增加了通道方向的3维数据进行卷积运算的例子:
计算顺序如下:
池化层
池化是缩小高、长方向上的空间的运算。如下,将2*2的区域集约成1个元素的处理,缩小空间大小。