入门神经网络-Python 实现(下)

回顾

紧接着上篇, 整到了, MES的公式和代码的实现.

MSE=1ni=1n(yiy^i)2

n 表示样本数, 这里为 4

y 表示要预测的变量, 这里是 性别

训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数

MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子.

姓名 yi (真实值) y^i (预测值) (yiy^i)
youge 1 0 1
share 1 0 1
naive 0 0 0
beyes 0 0 0

MSE=14(1+1+0+1)=0.5

BP算法本质 - 求导链式法则

现在继续...

始终要明确我们的目标: 最小化神经网络的损失 这个损失呢, 本质也就是一个关于 权重和偏置 的函数

如图所示:

则本例的损失函数可以这样参数化表示为:

L(w1,w2,w3,w4,w5,w6,b1,b2,b3)

现在来考虑对 w 进行优化, 假设要优化 w1 (即当 w1 变化时, L 会如何变化), 也就是: Lw1

为了简化一波问题, 假设数据集中就只有一个兄弟.

姓名 y1 y^1 (y1y^1)
youge 1 0 1

则此时的 MSE = (y1y^1)2=(1y^1)2

要计算 Lw1 根据网络的 反向 方向 (输出 -> 输入), 对应选取相应的中间变量, 这样能求出来呀. 根据求导链式法则:

Lw1=Ly^1y^1w1

由本例数据, 已知 L=(1y^1)2 , 上面公式的第一部分就可以求出来了:

Ly1=(1y^1)2y1=2(1y^1)

然后是 第二部分 y^1w1 观察图中的相关变量, 可看到 h1,h2,o1 分别表示该神经元的输出, 即:

y^1=o1=f(w5h1+w6h2+b3)

继续向后传播....

而我们关心的是 w1 , 看图中的线路就可知, w1 跟 h2 是没有关系的, 只跟 h1有关, 于是, 再来一波 求导链式法则

y^1w1=y^1h1h1w1

同样套路, 第一部分

y^1h1=f(w5h1+w6h2+b3)h1=w5[f(w5h1+w6h2+b3)]

f(w5h1+w6h2+b3) 这个其实就 看作 f(x), 里面不论多少项, 都是该 函数的自变量取值而已呀.

第二部分 也是一样滴处理

h1w1=f(w1x1+w2x2+b1)w1=w1[f(w1x1+w2x2+b1)]

终于走到输入值啦, 本例这里的 x_1 是身高, x_2 是体重. 这里的 f(x) 就是咱的 激活函数 (映射实值到0-1)

f(x)=11+ex

之前推导 逻辑回归的时候, 也是用的这个函数哦, 当时有个技巧点是, 其求导为: f(x)=f(x)(1f(x))

利用 分式 求导法则:

f(x)=0(ex)(1+ex)2

=11+exex1+ex

=f(x)(1f(x))

这个结果在推导逻辑回归的时候, 非常重要的哦, 求一阶导和二阶导都要用到

小结上边的一波操作, 其实就是一个 求导的链式法则:

Lw1=Ly^1y^1h1h1w1

从网络的方向上来看呢, 是从 output -> input 这样的 反向 误差传递, 这其实就是咱平时说的 BP算法, 而核心就是求导的链式法则而已呀.

所以嘛, 神经网络很多名词, 就是为了唬人, 当你扒开一看, 哦哦, 原来都只是用到一些 基础的数学知识而已

输入(已中心化):

姓名 体重 身高 性别 (y)
youge -2 5 1

输出比较

姓名 yi y^1 (y1y^1)
youge 1 0 1

同样, 为计算更加方便, 假设所有的 权重 为1, 所有的偏置为 0

h1=f(w1x1+w2x2+b1)

=f(2+5+0)

=f(3)=0.952

继续,

h2=f(w3x1+w4x2+b2)

=f(2+5+0)=h1=0.952

继续,

o1=f(w5h1+w6h2+b3)

=f(0.952+0.952+0)=0.721

停一波, 代码先缓一缓, 先检查下有没有bug.

posted @   致于数据科学家的小陈  阅读(291)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示

目录导航