引言
在之前博客中已经较为系统的学习了Andrew Ng的Machine Learning,并且每个章节对应的实验也都做了。 本博客对课程《deep learning coursera》中的五个模块进行学习,同样的相关的笔记以及实验代码也会记录在这里~
Foundation on Neural Network
感觉这部分跟之前博客《My study note of ML》重复较多,但是当作重新复习一次了~
Binary Classification(二分类)与Logistic Regression(逻辑回归)
分类问题分为二分类和多分类,二分类问题是指输出只有两个类别的问题,多分类问题是指输出有多个类别的问题。
逻辑回归(Logistic Regression)可以理解为在线性回归的基础上加上了一个sigmoid函数,将线性回归的输出值映射到0-1之间,从而实现二分类问题的解决。
进一步地,训练逻辑回归模型的目标是最小化损失函数,进而获取最优的权重w和b,损失函数的定义如下:
而cost function for training the parameter的定义如下:
通过梯度下降法(Gradient Descent)来最小化cost function,从而得到最优的参数w和b。
进一步地,通过下图可视化梯度下降法的过程,可以看到在每一次迭代中,cost function都在减小,最终收敛到最优解。
Computation Graph
接下来看看前向传播(Forward Propagation)和反向传播(Backward Propagation)的过程,这里引入了计算图(Computation Graph)的概念。 从左到右的计算可以计算出cost function的值,从右到左的计算可以计算出梯度值(导数)。
接下来看看逻辑回归的计算图,同样的,从左到右的计算可以计算出cost function的值,从右到左的计算可以计算出梯度值(导数)。
Vectorization
通过向量化来简化代码以及提高运算速度。而所谓的向量化其实也就是把权重和输入以矩阵的形式写出,并通过矩阵运算来实现。
而之所以python对于向量化的支持较好,是因为python中的boardcasting机制,可以使得不同维度的矩阵进行运算。 但同时会引入一些难以发现的bug,比如矩阵维度不匹配却不报错。因此首先尽可能的把数据都以矩阵的形式写出,然后再进行运算。
进一步的,也可以通过assert再次检查矩阵的维度是否匹配,从而避免一些潜在的bug。
基于逻辑回归实现图片分类任务
神经网络
直观来说,可以通过多个sigmoid函数的堆叠实现神经网络,之前也曾尝试过用逻辑回归实现神经网络的代码测试。
activation function
一般用relu函数或者tanh函数作为激活函数,因为sigmoid函数在深度神经网络中会出现梯度消失的问题。因此一般在二分类的最后一层(输出层)使用sigmoid函数,其他层使用relu或其他激活函数
基于神经网络的梯度下降(backpropagation)
神经网络的初始化
一般初始化习惯采用很小的值,这主要是对于sigmoid以及tanh函数来说,小的值的时候斜率(梯度)较大。
手写实现神经网络(非调用库函数)
Improving Deep Neural Network
Structuring Machine Learning Projects
Convolutional Neural Networks
Natural Language Processing with sequence models
参考资料
- My study note of ML
- coursera-deep-learning-specialization
- deep learning 深度学习专项 1/5 吴恩达 DeepLearning.AI
- deep learning 深度学习专项 2/5 吴恩达 DeepLearning.AI
- deep learning 深度学习专项 3/5 吴恩达 DeepLearning.AI
- deep learning 深度学习专项 4/5 吴恩达 DeepLearning.AI
- deep learning 深度学习专项 5/5 吴恩达 DeepLearning.AI
- deep learning- 吴恩达(Andrew Ng)
- Stanford CS230: Deep Learning Autumn 2018