Study Note for Deep Learning

2026-09-12

引言

在之前博客中已经较为系统的学习了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

参考资料