一、神经元

下图的蓝色区域被称为一个“感知机”(Perceptron), 感知机是对信息进行编码、压缩、集成、融合的计算机智能接口系统。

说白了,就是在输入端输入X1~X7这7个输入值,在感知机中乘以各自的权重矩阵、加上偏置值b后再放入激活函数f,最后输出结果y.

图中黄圈也代表了一个“感知机”,黄圈中进行了1.矩阵点乘后求和,2.加偏置值b,3.经过激活函数变换,这三项操作。

常见的三种激活函数是sigmoid函数(又称S函数)、tanh函数和Relu函数,图像和公式见下:

二、输入层、隐藏层、输出层

先求输出层的误差,而后倒推出隐藏层和输入层的误差:(d为真实值,O为最终预测值)

权重虚拟值:

偏置虚拟值:

三、开始手推公式

对neth1 通过sigmoid激活函数之后,得到outh1,我们先看一下sigmoid函数的长什么样:(其实上面介绍激活函数时也画出来了)

同理可得:

 

同理:

总损失:  

那么到此,结果的总损失已经算出,现在需要反向传播求偏导,以求出每一个参数对最终总损失的‘贡献’,为参数更新做准备。

同理:

从而得到W1更新值:

       

(注:1. 为学习率,即梯度下降中的步长,为超参数。

2.为什么学习率前是负号?因为目标函数一般都是下凹函数,偏导为正就需左移自变量,为负就需右移自变量)         

同理可得到每一个W的更新值:

顺便放在程序上跑一跑,可以发现进行这样的反向传播梯度更新的确会使最终结果越来越接近目标值。

(实际O1=0.01,O2=0.09)

最初的权重矩阵W0(随机赋值)是这样的:

迭代1000次(也就是更新1000次参数后)的权重矩阵W1000:

手算推导BP神经网络的更多相关文章

  1. BP神经网络推导过程详解

    BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 ...

  2. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

  3. 机器学习入门学习笔记:(一)BP神经网络原理推导及程序实现

    机器学习中,神经网络算法可以说是当下使用的最广泛的算法.神经网络的结构模仿自生物神经网络,生物神经网络中的每个神经元与其他神经元相连,当它“兴奋”时,想下一级相连的神经元发送化学物质,改变这些神经元的 ...

  4. Andrew BP 神经网络详细推导

    Lec 4 BP神经网络详细推导 本篇博客主要记录一下Coursera上Andrew机器学习BP神经网络的前向传播算法和反向传播算法的具体过程及其详细推导.方便后面手撸一个BP神经网络. 目录 Lec ...

  5. 练习推导一个最简单的BP神经网络训练过程【个人作业/数学推导】

    写在前面   各式资料中关于BP神经网络的讲解已经足够全面详尽,故不在此过多赘述.本文重点在于由一个"最简单"的神经网络练习推导其训练过程,和大家一起在练习中一起更好理解神经网络训 ...

  6. BP神经网络的直观推导与Java实现

    人工神经网络模拟人体对于外界刺激的反应.某种刺激经过人体多层神经细胞传递后,可以触发人脑中特定的区域做出反应.人体神经网络的作用就是把某种刺激与大脑中的特定区域关联起来了,这样我们对于不同的刺激就可以 ...

  7. BP神经网络原理及python实现

    [废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...

  8. 机器学习(一):梯度下降、神经网络、BP神经网络

    这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知 ...

  9. BP神经网络算法学习

    BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个 ...

  10. 【机器学习】BP神经网络实现手写数字识别

    最近用python写了一个实现手写数字识别的BP神经网络,BP的推导到处都是,但是一动手才知道,会理论推导跟实现它是两回事.关于BP神经网络的实现网上有一些代码,可惜或多或少都有各种问题,在下手写了一 ...

随机推荐

  1. [深度学习] ncnn安装和调用基础教程

    目录 1 介绍 2 Ubuntu 18下ncnn安装和使用 2.1 Ubuntu 18下ncnn编译安装 2.2 Ubuntu 18下ncnn使用 3 Windows 10下ncnn安装和使用 3.1 ...

  2. Hadoop详解(04-1) - 基于hadoop3.1.3配置Windows10本地开发运行环境

    Hadoop详解(04-1) - 基于hadoop3.1.3配置Windows10本地开发运行环境 环境准备 安装jdk环境 安装idea 配置maven 搭建好的hadoop集群 配置hadoop ...

  3. 如何实现在react现有项目中嵌入Blazor?

    如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...

  4. 垃圾收集器必问系列—CMS

    本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 应该相信,自己是生活的战胜者.--雨果 目录 CMS简介 运作过程 CMS的缺陷 处理器 ...

  5. 1.31 wlx 魔怔 9 解法交互题小结

    参考题解地址 1. 从树上任意一个节点开始,跳到其随机一个后代,跳到叶子的期望次数为 \(H_{siz_u}=\ln(siz_u)\). 证明: 首先考虑一条链的情况.设在第 \(i\) 个点期望次数 ...

  6. petite-vue和Vue的比较

    petite-vue不止是变得更小,它还是渐进式增强的最佳实践. Vue不构建或构建都能使用.当通过构建使用时(例如使用单文件组件),Vue预编译所有的模板,所以运行时没有再处理模板.多亏了树摇(th ...

  7. springboot自定义验证-传值范围

    package com.xf.common; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static ...

  8. redis使用bitmap实现签到

    import redis import datetime import calendar ​ r = redis.Redis( host="127.0.0.1", port=637 ...

  9. 破解练习-CRACKME002

    002-注册算法分析 一.工具和调试环境 动态调试工具:x64dbg 系统环境:win10 1909 二.分析Serial/name的算法 直接使用提示字符串验证,得到错误提示如下: 接下来使用x64 ...

  10. 使用vscode调试ros

    https://blog.csdn.net/u012254599/article/details/106143540/ CMakeLists.txt set(CMAKE_BUILD_TYPE &quo ...