吴恩达DL课程学习笔记——NN & DL(第四周)
第四周——深层神经网络
1、Introduction to DNN
只不过是把之前的单隐含层网络拓展了一下罢了,符号约定基本一致。
2、在DNN中做forward pass
通过for循环逐层计算Z和A,得到模型的输出矩阵。
3、核对矩阵的shape
(1)Z和dZ的shape一致,其他也是。
(2)前向或反向传播,只需确保等号两边的矩阵shape一致即可。
4、为什么使用深层表示
(1)有特征的内部变化,低层次的特征组合得到高层次抽象的特征,做特征的自动抽取。
(2)人脸检测任务:先检测出图像哪里有edge,再进一步检测出哪里有眼鼻嘴等,再进一步检测出哪里有人脸。
(3)感知野在逐步扩大(In CNN)。
(4)如果用浅层网络拟合一个函数,相较于small L-layer DNN,需要指数增长更多的hidden unit。
(5)当解决一个新的问题时,从logistic回归开始,然后尝试浅层网络,再逐步加深,将层数做为一个超参来调整。
5、DNN的building block
(1)参考Chainer DL框架,Linear Link是层(这个class的成员变量W和b是该层的参数),它包装了LinearFunction,要实现Function的forward and backward over cpu and gpu,forward和backward方法使用了模板方法模式。
(2)一个层只做一件事,例如线性层和激活层等,符合OOP的思想。
(3)自定义一个层,只需实现forward and backward pass即可,forward(self, inputs)和backward(self, inputs, grad_outputs),其中inputs和grad_outputs都是ndarray的元组,这两个方法返回的也是tuple of ndarray。
6、前向和反向传播
见基于Chainer的DNN实现代码(见我的Github):(1)实现Linear Link、ReLU Link和Sigmoid Link;(2)通过组合/堆叠这些层构建二分类模型,即Link => Chain;(3)数据驱动,训练得到二分类器。
7、参数 VS 超参
(1)超参,即需要告诉学习算法的东西,包括:学习率、迭代数、多少隐含层、隐含单元数和激活函数等。
(2)应用DL是一个经验性的过程,通过实验确定最佳超参。
8、DL和大脑的关系
目前的DL和大脑没什么关系。