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

回顾

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

\(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\)

n 表示样本数, 这里为 4

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

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

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

姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i - \hat y_i)\)
youge 1 0 1
share 1 0 1
naive 0 0 0
beyes 0 0 0

\(MSE = \frac {1}{4} (1 + 1 + 0 + 1) = 0.5\)

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

现在继续...

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

如图所示:

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

\(L(w_1, w_2, w_3, w_4, w_5, w_6, b1, b_2, b_3)\)

现在来考虑对 w 进行优化, 假设要优化 \(w_1\) (即当 \(w_1\) 变化时, L 会如何变化), 也就是: \(\frac {\partial L}{\partial w_1}\)

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

姓名 \(y_1\) \(\hat y_1\) (\(y_1 -\hat y_1\))
youge 1 0 1

则此时的 MSE = \((y_1 -\hat y_1)^2 = (1- \hat y_1)^2\)

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

\(\frac {\partial L}{\partial w_1} = \frac {\partial L}{\partial \hat y_1} * \frac {\partial \hat y_1}{\partial w_1}\)

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

\(\frac {\partial L} {\partial y_1} = \frac {\partial (1- \hat y_1)^2} {\partial y_1} = -2(1- \hat y_1)\)

然后是 第二部分 \(\frac {\partial \hat y_1}{\partial w_1}\) 观察图中的相关变量, 可看到 \(h_1, h_2, o_1\) 分别表示该神经元的输出, 即:

\(\hat y_1 = o_1 = f(w_5 h_1 + w_6 h_2 + b_3)\)

继续向后传播....

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

$\frac {\partial \hat y_1}{\partial w_1} = \frac {\partial \hat y_1} {\partial h_1} * \frac {\partial h_1}{\partial w_1} $

同样套路, 第一部分

\(\frac {\partial \hat y_1} {\partial h_1} = \frac {f(w_5h_1 + w_6h2 + b_3)} {\partial h_1} = w_5 * [f'(w_5h_1 + w_6h2+b_3)]\)

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

第二部分 也是一样滴处理

$\frac {\partial h_1}{\partial w_1} = \frac {f(w_1 x_1 + w_2 x_2 + b_1)} {\partial w_1} = w_1 * [f‘(w_1x_1 +w_2 x_2 + b_1)] $

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

\(f(x) = \frac {1}{1+e^{-x}}\)

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

利用 分式 求导法则:

\(f(x)' = \frac {0 - (-e^{-x)}}{(1+e^{-x})^2}\)

\(= \frac {1}{1+e^{-x}} * \frac {e^{-x}}{1+e^{-x}}\)

\(=f(x)(1-f(x))\)

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

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

\(\frac {\partial L}{\partial w_1} = \frac {\partial L}{\partial \hat y_1} * \frac {\partial \hat y_1}{\partial h_1} * \frac {\partial h_1}{\partial w_1}\)

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

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

case1: 计算偏导数(Link Rule)

输入(已中心化):

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

输出比较

姓名 \(y_i\) \(\hat y_1\) (\(y_1 -\hat y_1\))
youge 1 0 1

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

\(h_1 = f(w_1 x_1 + w_2 x_2 + b_1)\)

\(= f(-2 + 5 + 0)\)

\(=f(3) = 0.952\)

继续,

\(h_2 = f(w_3x_1 + w_4 x_2 + b_2)\)

\(= f(-2 + 5 + 0) = h_1 = 0.952\)

继续,

\(o_1 = f(w_5h_1 + w_6h_2 + b3)\)

\(=f(0.952 + 0.952 + 0) = 0.721\)

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

原文地址:https://www.cnblogs.com/chenjieyouge/p/12230000.html

时间: 2024-10-27 06:01:43

入门神经网络-Python 实现(下)的相关文章

补充(代码)-入门神经网络-Python 实现(下)

回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i -

手把手入门神经网络:从初等数学的角度初探神经网络

转一篇关于神经网络的小品文 https://mp.weixin.qq.com/s?__biz=MzA4MTA5MjE5Mw==&mid=401758390&idx=1&sn=a870201b307b6531abfe9c571461876e&scene=1&srcid=0122t2d7CyeurEFwtlp2ya3k&pass_ticket=5vlHG30VriwzFjNjxIzDT9YjTp2c0tOsRclaa6RliQEmlEGduKOiY9XcBWb0

《深度学习入门基于Python的理论与实现》PDF代码学习指导

入门神经网络深度学习,推荐学习<深度学习入门:基于Python的理论与实现>,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白.理解神经网络,很容易就能入门. 深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术.书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习. <深度学习入门:基于Python的理论与实现>中文版PDF,314页,带

鱼C《零基础入门学习Python》10-17节课时知识点总结

第10讲:列表:一个打了激素的数组 1. 列表都可以存放一些什么东西?  我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型. 2. 向列表增加元素有哪些方法?  三种方法想列表增加元素,分别是:append().extend() 和 insert().    3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?  append() 方法是将

Spark 入门(Python、Scala 版)

本文中,我们将首先讨论如何在本地机器上利用Spark进行简单分析.然后,将在入门级水平探索Spark,了解Spark是什么以及它如何工作(希望可以激发更多探索).最后两节将开始通过命令行与Spark进行交互,然后演示如何用Python写Spark应用,并作为Spark作业提交到集群上.同时也会提供相应的 Scala 版本. 1.设置Spark环境 在本机设置和运行Spark非常简单.你只需要下载一个预构建的包,只要你安装了Java 6+和Python 2.6+,就可以在Windows.Mac O

Python: Windows下pip的安装及简单应用

pip是一个用来管理和下载Python包的软件.通过pip,可以很容易就联网下载并安装需要的Python包到正确的位置,是一个很有用的软件. 由于自学的Python,刚开始需要下载第三方包的时候,总是被各种格式搞得头大.询问别人,别人就告诉个pip的命令,都说用这个就很方便就可以下载安装的.当时完全不知所云啊,因为看的Python入门那本书里压根没提过pip这个玩意.于是就百度了一下,终于知道了pip的基本用法. 写下此文,一方面是自己做个整理笔记,以备以后查看.另一方面,也希望有的初学Pyth

鱼C《零基础入门学习Python》1—9节课时知识点总结

第一节:我和python的第一次亲密接触 0. Python 是什么类型的语言? 答:脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言.C++语言 或 Java 之类的系统编程语言要简单容易.也让脚本语言另有一些属于脚本语言的特性: 语法和结构通常比较简单 学习和使用通常比较简单 通常以容易修改程序的“解释”作为运行方式,而不需要

深度学习入门:基于Python的理论与实现 高清中文版PDF电子版下载附源代码

本书特色1.日本深度学习入门经典畅销书,原版上市不足2年印刷已达100 000册.长期位列日亚"人工智能"类图书榜首,超多五星好评.2.使用Python 3,尽量不依赖外部库或工具,从零创建一个深度学习模型.3.示例代码清晰,源代码可下载,需要的运行环境非常简单.读者可以一边读书一边执行程序,简单易上手.4.使用平实的语言,结合直观的插图和具体的例子,将深度学习的原理掰开揉碎讲解,简明易懂.5.使用计算图介绍复杂的误差反向传播法,非常直观.6.相比AI圣经"花书",

Python 入门之Python基础知识

Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 赋值 值 (3)变量命名的规则: (1). 变量名由字母.数字.下划线组成 (2). 变量名不能以数字开头 (3). 变量名要具有可描述性 (4). 变量名要区分大小写 (5). 变量名禁止使用Python关键字 (6). 变量名不能使用中文和拼音(不是不能使用,太low) (7). 变量名推荐写