sp1.3-1.4 Neural Networks and Deep Learning

交叉熵定义了两个概率分布之间的距离,因为是概率分布 所以又引入softmax变为概率的形式 相加还是1
3 shallow neural network
 
神经网络输入层不算
 
 
上面是一个样本 若是多个样本:
依次算每个样本的结果
 
 
左下角的矩阵 每一列代表一个样本算出来的所有隐藏单元 z[][] 第几层第几个样本的隐藏单元
 
激活函数: tanh函数实际上是sigmoid函数平移的版本 这个效果更好 因为平均值是0
大部分情况都优于sigmoid
只在二元分类时候用下
 
 
先在几乎不用sigmoid激活
 
 
 
 
 
但是两者都有一个缺点 当z非常大或者小时候 斜率特别小 接近0 最后效率很慢
左半边导数是0 相当于 简化神经网络了呀
右边是常数的话 就是1 那么不会梯度消失或爆炸
 
 
 
 
 
 
 
 
 
 
relu函数第一常用虽然在0处不可导 但是在0点概率很小没事
当z<0时候导数为0 虽然没事 还有个版本的
leaky Relu修正线性单元 0.01也是自选的
第一,采用sigmoid等函数,反向传播求误差梯度时,求导计算量很大,而Relu求导非常容易。第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0),从而无法完成深层网络的训练。第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。
从上图不难看出,ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。可别小看这个简单的操作,正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。这里或许有童鞋会问:ReLU的函数图像为什么一定要长这样?反过来,或者朝下延伸行不行?其实还不一定要长这样。只要能起到单侧抑制的作用,无论是镜面翻转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。之所以这样定,或许是为了契合生物学角度,便于我们理解吧。
那么问题来了:这种稀疏性有何作用?换句话说,我们为什么需要让神经元稀疏?不妨举栗子来说明。当看名侦探柯南的时候,我们可以根据故事情节进行思考和推理,这时用到的是我们的大脑左半球;而当看蒙面唱将时,我们可以跟着歌手一起哼唱,这时用到的则是我们的右半球。左半球侧重理性思维,而右半球侧重感性思维。也就是说,当我们在进行运算或者欣赏时,都会有一部分神经元处于激活或是抑制状态,可以说是各司其职。再比如,生病了去医院看病,检查报告里面上百项指标,但跟病情相关的通常只有那么几个。与之类似,当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。
 
此外,相比于其它激活函数来说,ReLU有以下优势:对于线性函数而言,ReLU的表达能力更强,尤其体现在深度网络中;而对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。这里稍微描述一下什么是梯度消失问题:当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前。
 
要是没有激活函数的话:
直接a1=z1 不激活 然后进到a2 变成下面的式子了 还是线性变化 相当于逻辑回归了 隐藏层没有任何作用 线性组合还是线性的 除非引入非线性函数
只在线性回归 y不是0或1而是实数时候不用激活函数 机器学习上来预测房价那个 你得输出也是实数不是0或1 但是隐藏单元还是用激活函数 输出不用
对sigmoid函数求导还是那个 当z很大或者很小时候 导数约为0 下降特别慢 =0斜率0.25
 
对于tanh函数求导:同样还是很大很小斜率接近0 =0斜率是1
 
对于ReLU函数:在.处虽然不可导 但是取这点是小概率可以忽略
 
对于leaky ReLU:对于小于0时候 是自己定义的0.01
 
 
 
为什么使用激活函数
不使用的话 线性变化 再做一个线性变化 还是线性的 表达能力没区别
不管有多少个隐藏层 没有任何效果 因为线性函数 组合还是线性函数啊
只有当解决回归问题似乎 可能不用激活函数
 
反向传播:
 
 
 
 
逻辑回归是一步 神经网络中间重复多次
反向传播第一步和逻辑回归一样吧 这里dz2 da2 dw2
 
 
 
随机化初始权重:要不隐藏层每列的单元都一样了 因为用这同样的式子
 
后面自定义的 但是不要太大 太大的话 z大 下降的慢
 
 
 
_________________________________________________
4 deep neural network
 
L表示层数 N表示第几层的单元总数 a第几层的激活单元 激活函数过得
 
这里有个for循环对于 每一层 不可避免的
 
检查维度
 
 
为什么深度神经网络有效:
特征检测器(边缘检测器) 找的比如是水平边缘(较低层次的信息) 什么边之类的
然后找小块可能 最后可能就整体了
 
就像门电路一样 或者从浅入深理解问题,从边缘到主体 可能一个神经元主要找鼻子一个找耳朵 等等 最后 再进一步组成脸部
或者像语音识别一样, 第一层先找白噪音啊 音调啊 组合一起 然后找音节 组一起可能就是单词
 
使用深层比浅层更有效的原因 如果你让浅层的 足够大 也有可能可以
 
 
 
 
右边向量化的版本
 
 
 
 
 
Parameters vs Hyperparameters 参数和超参数
参数:就是w和b
超参数最终影响了w和b: 学习速率α,下降循环的次数,隐藏层数 每层的单元数,激活函数的选择等
现在很多时候还是凭经验 比如学习速率多试几次 看看代价函数的值怎么样
 
 
 

猜你喜欢

转载自www.cnblogs.com/hellodantong/p/9965199.html
今日推荐