梯度下降
成本函数(Cost function):
衡量的是参数和在训练集上的效果
成本函数是一个在三维空间上的凹函数,
梯度下降就是,从和的初始值开始,朝着能使成本函数下降最快的方向移动一步,
下降之后,再让和向前走一步,即为梯度下降的一次迭代
梯度下降(Gradient descent)
本来由和两位参数决定取值,现在忽略一个参数,使仅有为自变量,图解其梯度下降过程如下:
梯度下降的过程:
其中:
- 表示学习率,通过控制学习率的大小可以控制每一次迭代或者梯度下降的步长,以后会提到如何选择学习率
- 表示对的导数,在Python编程过程中用dw表示
- ":="表示更新前面的的值
现在回到两个自变量和的情况,在logstic回归过程中,成本函数是和的函数
在这种情况下,梯度下降过程就由上面的只更新一个参数变成要更新两个参数和的情况了,而每一次梯度下降也变成由更新和更新的两部分组成,而上面的求导过程也变成了求偏导过程,如下:
具体编程时,用dw表示,用db表示
前缀d表示输出变量对某个参数的导数,用d(var)表示,
dv,da,db,dl均表示最终变量对各个自变量的导数,或者说是偏导数
logistic回归的前向传播和反向传播过程
logistic前向传播的输出为,
假设样本只有x1和x2两个输入特征,则前向传播和反向传播求导的示意如下:

在logstic回归中我们要做的就是利用梯度下降不断的更新迭代和的值,来使得损失函数最小
所以我们要做的是,首先计算损失函数对各个参数的导数,或者说是偏导数,然后利用梯度下降不断的更新迭代和的值:
计算dz:dz=a-y
计算dw1:dw1=x1*dz
计算dw2:dw2=x2*dz
计算db:db=dz
然后是梯度下降迭代过程:
更新w1为:w1=w1-*dw1
更新w2为:w2=w2-*dw2
更新b为:b=b-*db
其中为学习率
上面就是单个样本的一次梯度更新步骤,实现单个训练样本的logistic回归的梯度下降法
全局的梯度下降法
上面提到的是单个样本的梯度下降过程,下面将这个范围拓展到全局
成本函数:
其中:
则
上标(i)表示这是对第i个训练样本的计算,下面的计算过程为 :
上面的计算过程可以计算出成本函数对w1,w2和b的导数
dw1,dw2等于全局成本函数对w1,w2的导数,其中dw1,dw2没有上标(i)这是因为其作为累加器,求取的是整个训练集上的和,而dz则是相对于单个训练样本而言的。
完成上述计算后再进行梯度下降的迭代更新:
而在实际的计算机处理过程中,上面提到的使用两个for循环的方法过于低效,所以我们接下来采用将各个参数向量化的方法来取代for循环
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡