文章总览图
一
神经网络简介
1,什么是神经网络?
神经网络是由许多神经元分层级联而成的网络,可以用来拟合各种函数。
单个神经元是一个非线性函数,它接收多个输入x,将它们线性组合后再用一个非线性激活函数作用,产生输出值 y。
2,为什么深度学习会兴起?
当数据规模增长到非常大时,深度神经网络的表现通常会远远超过传统的机器学习算法。
深度学习的兴起可以归功于数据规模,计算性能,以及计算算法的进步。
3,神经网络的基本结构
神经网络一般由一个输入层,一个输出层以及输入层和输出层之间的若干个隐藏层组成。隐藏层的神经元的取值在训练集数据中是没有的,所以叫做隐藏层。计算神经网络的层数时不包括输入层。
常见的神经网络结构有标准的神经网络,卷积神经网络和循环神经网络。卷积神经网络一般用于处理图像问题,循环神经网络一般用于处理序列问题。
4,基本符号约定
不同节点用下标来指定,不同样本用带小括号的上标来指定,不同层用带中括号的上标来指定。
二
单层神经网络
1,逻辑回归模型
逻辑回归模型可以看成是最简单的神经网络,它只有一个神经元。逻辑回归模型是一个经典的二元分类算法,它将输入特征的线性组合通过Sigmoid函数映射到(0,1)之间作为输出值,表示预测样本为正样本的概率。
2,交叉熵损失函数
为了求解逻辑回归模型中的w和b,需要定义一个目标函数。机器学习中的目标函数通常由损失函数和正则化项组成。其中损失函数衡量模型对训练集样本的拟合程度,函数值越小说明模型对训练集样本偏差越小,拟合程度越好,通常通过提高模型的复杂性能够降低模型对训练集样本的偏差。正则化项描述模型的复杂程度,正则化项越小说明模型越简单。通常较简单的模型的预测结果较稳定,具有更强的抗噪能力,即较低的方差,在未知数据上的泛化能力也更好。偏差和方差均衡是机器学习模型需要解决的普遍问题。
线性回归模型采用的损失函数为平方损失函数,而逻辑回归采用的损失函数是交叉熵损失函数。交叉熵损失函数的形式可以用极大似然估计算法推导得到。对于多样本的情况,逻辑回归的交叉熵损失函数是关于w和b参数的凸函数,即至多仅有一个极值点,这一优良性质使得它能够很好地被用于w和b的学习。
3,梯度下降法
梯度下降法是求解函数最小值的简单的数值迭代算法。梯度下降算法的基本原理是函数的输入参数沿着负梯度发生微小改变,函数值将会下降。梯度下降算法只适用于求解凸函数的最小值,在目标函数有多个极小值时,即非凸函数时,使用梯度下降算法可能会落入局部极小值点。
4,计算图
对于存在复杂嵌套关系的函数,可以用计算图的可视化方法简化函数值和对各个参数偏导数的计算过程。计算图可以直观呈现函数中各个变量之间的依赖关系,在计算图的帮助下,应用导数计算的链式法则将非常清晰明了。
5,向量化
对于不存在先后依赖关系的相似计算任务,即可以并行的计算任务,许多时候可以用向量化的方式优化计算过程。向量化计算方式和循环计算方式相比,计算效率可以成百上千倍地提高。
在逻辑回归模型或者神经网络中,需要对多个样本进行训练。可以用矩阵形式表达计算公式,将不同的样本放在矩阵的不同列,将同一层不同节点放在矩阵的不同行。使用python中的numpy数组可以计算矩阵形式的公式,并实现高效的向量化计算。使用numpy数组进行矩阵计算时,应当使用2维的ndarray来表示矩阵,若使用0维的ndarray,容易出现各种维度错误。
三
浅层神经网络
1,常用激活函数
在构建神经网络时可以在不同层选取不同的激活函数。常用的激活函数有Sigmoid函数,双曲正切函数Tanh,修正线性单元ReLu,带漏的修正线性单元LeakyReLu。
除了分类问题的输出层,一般不推荐使用Sigmoid激活函数。通常Tanh总是表现优于Sigmoid函数,主要原因是它的输出是关于0对称的。ReLu是使用最多的激活函数,可以作为隐藏层的默认激活函数,主要优势是其导数计算简单,在输入取值较大时不会出现导数太小导致学习速度太慢的情况。有研究表明在某些情况下LeakyReLu的表现会好于ReLu,主要是当输入小于0时其导数不会取值为0,但在有许多神经元的时候,采用ReLu激活函数,并不用特别担心全部神经元的导数都为0从而使得学习无法进行的情况的发生。
2,为什么使用非线性激活函数?
如果使用线性激活函数,那么无论有多少个隐藏层,最终输出层结果都将是输入层的线性组合,那么隐藏层就变得没有任何意义,也不可能学到除线性函数之外的其它有趣的函数形式。
3,为什么W需要随机初始化?
W需要随机初始化,b可以初始化为0,一般将W随机初始化为一些很小的数。如果W全部初始化为0或者其它相等的取值,那么由于对称性,无论经过多少次正向传播和反向传播,同一层的神经元节点的W参数取值将始终是一样的,这使得同一隐藏层的多个节点没有任何意义,不能够有效地学习较为复杂的函数。
四
深层神经网络
1,正向传播和反向传播
可以通过正向传播函数从前往后依次计算各层神经元节点的函数值。
可以通过反向传播函数从后往前依次计算各层神经元节点的导数值。
正向传播函数可以用2个公式来计算。
反向传播函数可以用4个公式来计算。
这6个公式是实现神经网络的核心公式。
2,核对矩阵维数
实现神经网络算法时,通过核对矩阵维数可以减少许多错误。
3,参数和超参数
参数是机器学习模型通过对数据学习获得优化的参数。而超参数是我们设计算法时,需要人工指定的参数。通常可以使用交叉验证的方法来有优化机器学习算法的超参数,俗称调参。
在神经网络中,参数是各层的W和b。超参数包括学习率alpha,神经网络的层数L,各层的节点个数,正反向传播循环的次数,激活函数的形式,以及最优化算法的选取等。