标签:cas 正则 之间 其他 很多 keep 允许 单元 phone
1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环。唯一用for循环的地方是依次在每一层做计算。
2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度。
正向传播:
对于单个样本,第i层网络 z[i] = W[i]a[i-1] + b[i],
a[i] = f[i](z[i])。
其中,z[i]是n[i]*1,W[i]是n[i]*n[i-1],a[i-1]是n[i-1]*1,b[i]是n[i]*1。
对于向量化后的所有样本,第i层网络 Z[i] = W[i]A[i-1] + b[i],
A[i] = f[i](Z[i])。
其中,Z[i]是n[i]*m,W[i]是n[i]*n[i-1],A[i-1]是n[i-1]*m,b[i]是n[i]*1,python运算过程中会把b[i]broadcasting成n[i]*m,m是训练集样本数量。
反向传播:
对于单个样本,第i层网络 dz[i] = da[i]*f[i]‘(z[i]),*是对应元素相乘。
dw[i]=dz[i]a[i-1]
db[i]=dz[i]
da[i-1]=W[i]Tdz[i]
对于向量化后的所有样本,第i层网络 dZ[i] = dA[i]*f[i]‘(Z[i]),*是对应元素相乘。
dW[i]=1/m*dZ[i]A[i-1]T
db[i]=1/m*np.sum(dZ[i], axis=1, keepdims=True)
dA[i-1]=W[i]TdZ[i]
3. 深度神经网络的直观解释:比如做人脸检测的时候,可以把浅层的神经网络当成是边缘检测器,不同的神经元检测不同方向的边缘在图片的位置。中层的神经网络是把第一层提取出的不同位置的不同方向的边缘特征组合成面部的不同部分,比如有的是眼睛,有的是鼻子。深层的神经网络把这些部分放在一起组合成不同的人脸。对于语音识别,也是类似,浅层的神经网络检测低层次的波形特征,比如音调高低,白噪声还是咝咝的声音,中层的神经网络可以把波形特征组合成音位(phoneme),识别基本的声音单元,深层的神经网络可以把识别单词,再深层次的神经网络可以识别句子。
另外一种深度神经网络有效性的解释来源于电路理论,如果使用树形一层层堆叠简单的操作,那么最终实现复杂功能需要的元器件数量是O(logn),而如果只允许使用浅层网络,则需要O(2n)的元器件。
NG说还有一个原因让深度神经网络很迷人是名字取得好。。。。。。“深度”!一听就很酷炫。但带来的问题是人会很按照字面意思钻牛角尖非要用很深的网络,但实际上,NG自己在思考问题的时候,还是从最简单的模型比如Logistic回归入手,然后试试一两个隐藏层,把隐藏层的层数当成超参数一样去调试。
4. NG说即使他做机器学习很多年了,但是依旧经常搞不明白为什么算法就可以工作,会很惊讶结果这么好。实际算法的复杂性来源于数据,而不是写的代码。
5. 超参数:学习率,梯度下降循环的次数,隐藏层数量,每一层隐藏神经元的数量,激活函数的类型。其他超参数包括:momentum,mini batch的大小,正则化参数的形式,等等。
深度学习领域非常基于经验,基于经验的意思就是不断试参数直到合适。。。针对不同的模型最优的超参数值是不同的,所以必须针对具体问题多试,甚至针对相同的问题,超参数的最优值也会变化,比如广告点击率,所以即使模型建好了跑通了,也要隔一段时间尝试一下新的超参数。
6. NG觉得深度学习和人类大脑相关性不大,因为大脑神经元的机制比神经网络算法复杂的多的多的多。深度学习的确是一种很好的方法来找到输入和输出之间复杂映射关系。
deeplearning.ai 神经网络和深度学习 week4 听课笔记
标签:cas 正则 之间 其他 很多 keep 允许 单元 phone
原文地址:http://www.cnblogs.com/zonghaochen/p/7727214.html