逻辑回归的目标函数如下:以网络表达就是感知器
神经网络的层数中输入层不算,从隐藏层开始到输出层,有几层就代表着是几层的神经网络,
如上图就是一个三层结构的神经网络。
- 多隐藏层的神经网络比 单隐藏层的神经网络工程效果好很多。
- 提升隐层层数或者隐层神经元个数,神经网络“容量”会变大,空间表达力会变强。
- 过多的隐层和神经元节点,会带来过拟合问题。
- 不要试图通过降低神经网络参数量来减缓过拟合,用正则化或者dropout。
神经网络参数的初始化方法:
-
采用正态分布的随机初始化方法。
-
Xavier初始化方法:假设某全连接层的输入个数为a,输出个数为b,Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
初始化后,每层输出的方差不会受该层输入个数的影响,且每层梯度的方差也不受该层输出个数的影响。
激活函数:
sigmoid:
tanh:是 sigmoid 的向下平移和伸缩后的结果。
sigmoid函数和tanh函数两者共同的缺点是,在𝑧特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度。
Relu:修正线性单元函数,max(0, z)
softmax: Sigmoid 和 ReLu 激活函数,输入一个实数,输出一个实数。Softmax 激活函数的特殊之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量。
归一化的概率和为1。
- 在𝑧的区间变动很大的情况下,激活函数的导数或者激活函数的斜率都会远大于0,在程序实现就是一个 if-else 语句,而 sigmoid 函数需要进行浮点四则运算,在实践中,使用 ReLu 激活函数神经网络通常会比使用 sigmoid 或者 tanh 激活函数学习的更快。
- sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,而 Relu 和 Leaky ReLu 函数大于 0 部分都为常数,不会产生梯度弥散现象。(同时应该注意到的是,Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性,而 Leaky ReLu 不会有这问题) 𝑧在 ReLu 的梯度一半都是 0,但是,有足够的隐藏层使得 z 值大于 0,所以对大多数的 训练数据来说学习过程仍然可以很快。
人工神经网络中为什么ReLu要好过于tanh和sigmoid function?
- 采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
- 对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),这种现象称为饱和,从而无法完成深层网络的训练。而ReLU就不会有饱和倾向,不会有特别小的梯度出现。
- Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进,具体的可以找相关的paper看。
激活函数的性质:
神经网络是端到端学习:
端到端学习(end-to-end)是一种解决问题的思路,与之对应的是多步骤解决问题,就是将一个问题拆分为多个步骤分步解决,而端到端是由输入端的数据直接得到输出端的结果。不要预处理和特征提取,直接把原始数据扔进去得到最终结果。
特征提取包含在神经网络内部,所以神经网络是端到端的网络。
优点:通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
缺点
- 可能需要大量的数据。要直接学到这个𝑥到𝑦的映射,可能需要大量(𝑥, 𝑦)数据。
- 排除了可能有用的手工设计组件。
交叉熵损失函数:
softmax运算将输出变换成一个合法的类别预测分布。实际上,真实标签也可以用类别分布表达:
训练目标可以设为使预测概率分布 尽可能接近真实的标签概率 。
想要预测分类结果正确并不需要预测概率完全等于标签概率,因此使用平方损失过于严格。改善这个问题的一个方法是使用更适合衡量两个概率分布差异的测量函数。
交叉熵(cross entropy)是一个常用的衡量方法:
其中带下标的 是向量 中非 0 即 1 的元素。交叉熵只关心对正确类别的预测概率,其值足够大,就可以确保分类结果正确。
即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。