Coursera deeplearning.ai 深度学习笔记1-2-Neural Network Basics-逻辑回归原理推导与代码实现
来源:互联网 发布:淘宝网访问不了 编辑:程序博客网 时间:2024/06/07 02:22
逻辑回归(Logistic Regression)是一个非线性回归模型,主要应用于0、1分类问题,也可看作单层的神经网络。
1. 原理推导
1.1 样本定义
每个样本计作(x, y),其中x为特征向量,y为标签0或1,x包含nx个特征:
训练集包含m个样本:
1.2 逻辑回归模型
问题:给定x,如何训练参数w和b,得到期望值
为了保证期望值a在0 ~ 1之间,给定逻辑回归模型:
式中,w维度为(nx, 1),b为实数,z为线性模型,σ(z)为非线性的sigmoid函数。
1.3 sigmoid函数
当z → ∞时,σ(z) → 1;当z → -∞时,σ(z) → 0。函数值处于0 ~ 1之间,因此适合于0、1分类问题。曲线如下:
1.4 代价函数(Cost Function)
目标:给定训练集
由于期望
使用概率论中极大似然估计(Maximum Likelihood Estimate,MLE)的方法来计算损失函数,可将概率写成:
取对数似然函数:
上式中,L(a, y)为损失函数(Loss Function),最大似然估计的目标是使log[P(y|x)]最大化,也就是损失函数L(a, y)最小化。则损失函数为:
当y = 1时,
当y = 0时,
对于m个训练样本,假设训练样本互相独立,则m个样本的联合概率可以写成:
取对数似然函数:
上式中,J为代价函数,最大似然估计的目标是使log(Pmsamples)最大化,也就是代价函数J最小化,可得代价函数:
1.5 梯度下降(Gradient Descent)
目标:寻找最优参数w, b,使得代价函数J(w, b)最小化。
梯度下降法:初始化w, b,沿着梯度最大的方向对参数进行更新,直到代价函数最小化,得到全局最优参数。
参数更新如下式,α为学习因子(learning rate):
为了方便推导,用“dr”代表损失函数或代价函数对r的偏导数
由求导链式法则以及
可得:
对于逻辑回归模型,易得:
通过上式,即可对参数w和b进行更新。
1.6 向量化(Vectorization)
对于m个样本,将训练集(X, Y)写成矩阵的形式,X维度为(nx, m),Y维度为(1, m):
正向传播(Forward Propagation ):
反向传播(Backward Propagation):
1.7 逻辑回归实现(For循环与向量化对比)
1.7.1 For循环实现
需要iteration * m次循环。
1.7.2 向量化实现
仅需要iteration次循环。
2. 代码实现
案例:判断一张图片是否为猫。
各个模块如下:
2.1 初始化initialize_zeros
初始化w为零矩阵,维度(nx, 1),b为0。关键代码如下:
2.2 正向传播和反向传播propagate
输入w, b, X, Y,按照下式计算代价函数J以及梯度dw、db。
关键代码如下:
2.3 参数更新优化optimize
按照下式的梯度下降法更新参数w和b,α为学习因子。
关键代码如下:
2.4 预测predict
根据优化得到的参数w和b,输入样本x,得到预测值,如果预测概率大于0.5,则预测值为1,否则为0。关键代码如下:
2.5 模型训练model
将以上几个模块进行整合,输入训练样本和测试样本,得到预测准确率。关键代码如下:
2.6 样本测试
得到结果如下,可知,代价函数在迭代过程中不断降低,训练样本准确率99%,测试样本准确率70%。
2.7 学习因子的影响
代码如下:
得到结果如下,可知,不同学习因子得到的结果不同。如果学习因子较大,可能会发散;如果学习因子太小,学习速度较慢。
代码下载地址:https://gitee.com/tuzhen301/Coursera-deeplearning.ai1-2
- Coursera deeplearning.ai 深度学习笔记1-2-Neural Network Basics-逻辑回归原理推导与代码实现
- Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- Coursera deeplearning.ai 深度学习习题1-2-Neural Network Basics
- Coursera deeplearning.ai 深度学习习题1-4-Neural Network Basics
- Coursera deeplearning.ai 深度学习笔记2-2-Optimization algorithms-优化算法与代码实现
- Coursera deeplearning.ai 深度学习笔记2-1-Practical aspects of deep learning-神经网络实际问题分析(初始化&正则化&训练效率)与代码实现
- Coursera deeplearning.ai 深度学习习题1-3-Shallow Neural Networks
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础(转载)
- Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-1)-- 深度学习的实践方面
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-1)-- 深度学习的实践方面(转载)
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(4-2)-- 深度卷积模型
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(4-2)-- 深度卷积模型
- Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归
- Coursera deeplearning.ai 深度学习习题2-2-Optimization algorithms
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(2-2)-- 优化算法
- 吴恩达机器学习笔记(一),含作业及附加题答案链接
- ngnix静态资源访问配置
- Nginx的启动、停止与重启
- HDU-2157
- Nginx配置文件(nginx.conf)配置详解
- Coursera deeplearning.ai 深度学习笔记1-2-Neural Network Basics-逻辑回归原理推导与代码实现
- 动态规划
- 修改markdown里面的class标签
- Python的内存管理、对象的引用
- 窗口子类化
- ListView点击变色
- 2017-12-9小计
- Day28---类加载器笔记
- Day28-动态代理笔记