神经网络
1.1 神经网络的前向传播
我们首先定义如下图所示的神经网络,为了简单起见,所有的层都不加偏置。其中,𝑋X 表示输入层,𝑍𝑗𝑖Zij 表示第 𝑗j 个隐含层的所有神经元,𝑊𝑗Wj 表示第 𝑗j 层的权重。
因此:
𝑊1=⎡⎣⎢⎢⎢𝑤111𝑤112𝑤113𝑤121𝑤122𝑤123⎤⎦⎥⎥⎥,𝑊2=[𝑤211𝑤212𝑤221𝑤222𝑤231𝑤232],𝑊3=[𝑤311,𝑤321]W1=[w111w211w121w221w131w231],W2=[w112w212w312w122w222w322],W3=[w113,w213]
所以:
𝑍1=⎡⎣⎢⎢⎢𝑧11𝑧12𝑧13⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢𝑤111𝑤112𝑤113𝑤121𝑤122𝑤123⎤⎦⎥⎥⎥[𝑥1𝑥2]=⎡⎣⎢⎢⎢𝑧11𝑧12𝑧13⎤⎦⎥⎥⎥=𝑊1𝑋,𝑍2=𝑊2𝑍1,𝑦𝑜𝑢𝑡=𝑊3𝑍2Z1=[z11z21z31]=[w111w211w121w221w131w231][x1x2]=[z11z21z31]=W1X,Z2=W2Z1,yout=W3Z2
最终的 𝐿𝑜𝑠𝑠Loss 函数可以表示为:𝐿𝑜𝑠𝑠=12(𝑦𝑖−𝑦𝑜𝑢𝑡)2Loss=12(yi−yout)2
在训练过程中,我们要保证 𝐿𝑜𝑠𝑠Loss 越小越好,因此采用梯度下降的方法来求解网络的参数 𝑊=[𝑤111,𝑤121,...,𝑤321]W=[w111,w211,...,w213],于是就需要求解 𝐿𝑜𝑠𝑠Loss 对所有参数的偏导数 ∇𝐿(𝑤)=[∂𝐿(𝑤)∂𝑤111,∂𝐿(𝑤)∂𝑤112,...∂𝐿(𝑤)∂𝑤321]𝑇∇L(w)=[∂L(w)∂w111,∂L(w)∂w121,...∂L(w)∂w213]T,于是权重更新公式可以写为:
𝑊𝑘+1=𝑊𝑘−𝛼∇𝐿(𝑤)Wk+1=Wk−α∇L(w)
1.2 神经网络的反向求导
在上一节中, 我们大致对神经网络的梯度更新有了了解,其中最核心的部分就是求出损失函数对权重 𝑤𝑙𝑖𝑗wijl 的导数。由于网上大多数资料都是生搬硬套,因此我们以计算 𝑊1W1 的导数为例,对整个反向求导过程进行细致的剖析。如下图所示:
其中,𝑤𝑙𝑗𝑘wjkl 表示从第 𝑙l 层的第 𝑗j 个节点到第 𝑙+1l+1 层中的第 𝑘k 个节点的权重,根据前向传播的计算我们可以得到:
𝑦𝑜𝑢𝑡∼(𝑤311𝑤211+𝑤3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!