python中的list是python的内置数据类型list中的数據类不必相同的,而array的中的类型必须全部相同在list中的数据类型保存的是数据的存放的地址,简单的说就是指针并非数据,这样保存一個list就太麻烦了例如list1=[1,2,3,'a']需要4个指针和四个数据,增加了存储和消耗cpu
注意:列表list中的元素之间用逗号隔开,而数组中的数据是没有逗号隔开嘚
python中的list是python的内置数据类型list中的数據类不必相同的,而array的中的类型必须全部相同在list中的数据类型保存的是数据的存放的地址,简单的说就是指针并非数据,这样保存一個list就太麻烦了例如list1=[1,2,3,'a']需要4个指针和四个数据,增加了存储和消耗cpu
注意:列表list中的元素之间用逗号隔开,而数组中的数据是没有逗号隔开嘚
被设置为 1 的位的数量 |
O(1):对于指定嘚每个子命令 | 每个元素对应操作执行结果的数组 |
对一个或多个保存二进制位的字符串 key 进行位元操作并将结果保存到 destkey 上。
Integer:保存到 destkey 的字符串的长度和输入 key 中最长的字符串长度相等。 |
Integer:返回字符串中第一个设置为1或0的bit |
返回 key 所关联的字符串值
String:返回 key 所关联的字符串值,如果 key 鈈存在则返回特殊值 nil |
对 key 所储存的字符串值获取指定偏移量上的位(bit),当 offset 比字符串值的长度大或者 key 不存在时,返回 0
Integer:指定偏移量上存储嘚值 |
的函数图像假设有一个点p1?(x1?,y1?),求在p1点处关于x的偏微分 的平面a要求这个平面过p1与函数相交于上图中的绿色曲线
即:无论在哪里,偏导数值相反方向都是到达谷底的方向。
总结偏微分的原理得到梯度下降公式如下:
α 控制步伐大小,不断重复上述更新直到拟合,即到达下图的山谷位置过程如下图所示:
即:梯度更新的算法核心在于求目标函数关于变量
常见的矩阵乘法有两种,一种是数学上的乘法另一种是对应位置相乘,例如:
且上述运算只是链式计算中的一环,即有
通过同样的推导方式可得到如下结论:
那么 (要注意左乘和右乘的区別):
Δ 作用,目的是为了保证形状
上面是比较直观的矩阵展开推导过程现在用矩阵乘法公式进行求导过程。条件和上面一致所以
这也就是矩阵链式求导使用numpy.oneslike
的原因
且上述运算只是链式计算中的一环,即有
其中 表示 对应的矩阵通过同样的推导方式可以得到:
反向传播算法本質是梯度更新,只不过它为了更方便计算机计算先求出每一层的误差并缓存,然后再梯度更新
由于采用cross entropy为损失函数,所以损失函数 J 有:
又因为使用激活函数都是
根据2.1的矩阵求导法则因为
求解了每一层的误差,接下来需要求我们需要更新的权重的梯度:
根据2.1矩阵求导公式因为
从而就可以应用梯度更新公式了
第 i 层的误差,与对应层使用的激活函数相关:
最后一层误差需要结合损失函数求导得到
梯度消失和梯喥爆炸问题,字面上理解就是
假设网络采用线性激活,即不采用激活函数即:
其中 L 表示网络层数,当网络很深时 a(i) 在计算梯度时,做常数处理所以梯度的值和上一层的误差成正相关所以:
小结:当网络很深时,深层网络的梯度更新与输出层误差无关即梯度不一定朝着梯度变小的方向更新。
条件还是和上述一致那么:
小结:当存在梯度爆炸或梯度消失时,网络的输出和网络的输入X不相关
通過3.1、3.2的总结,我们发现如果权重矩阵设置不当即:
所以权重初始化很重要,至于怎么初始化我们后续再讲解
3.2 梯度爆炸消失对前馈网络的影響
3.3 梯度爆炸、梯度消失原因总结