深度学习(神经网络)

news2024/11/26 10:44:52

文章目录

  • 神经网络历史
  • 形式神经元模型(M-P模型)
  • 感知器
    • 多层感知器
  • 误差反向传播算法
  • 误差函数和激活函数
    • 误差函数
      • 二次代价函数
      • 交叉熵代价函数
    • 激活函数
      • sigmoid函数
      • RELU函数
    • 似然函数
      • softmax函数
  • 随机梯度下降法
    • 批量学习方法
    • 在线学习
    • 小批量梯度下降法
  • 学习率
    • 自适应调整学习率---AdaGrad方法

神经网络历史


  • 提出形式神经元模型(M-P模型)(1943)
  • 提出感知器(1958)
  • 感知器无法解决线性不可分问题(1969)

  • 提出神经认知机(1980)
  • 提出霍普菲尔德模型(1982)
  • 提出误差反向传播算法(1986)
  • 提出卷积神经网络(1989)

  • 提出将 预训练和自编码器 与 深度神经网络 相结合(2006)
  • 提出在卷积神经网络中引入ReLU作为激活函数(2012)

形式神经元模型(M-P模型)

  • 多个输入结点 x i x_i xi 对应一个输出结点
  • 每个输入结点乘以连接权重 w i w_i wi,相加得到 y y y
  • y大于阈值h,输出1,否则输出0。

感知器

感知器能够通过训练自动确定参数

引入误差修正学习:根据实际输出与期望输出的差值调整权重 w i w_i wi 和阈值 h h h

多层感知器

多层结构的感知器 递阶组成 输入值向前传播的网络。(前馈网络、正向传播网络)

通常采用三层结构:输入层,中间层,输出层。

误差反向传播算法

通过比较实际输出和期望输出得到的误差信号,把误差信号从输出层逐层向前传播得到各层的误差信号,再通过调整各层的连接权重以减小误差。

通过实际输出和期望输出之间的误差 E E E梯度进行调整。

例:
y 1 = w 1 x + 1 , w 1 = 2 y 2 = w 2 y 1 2 , w 2 = 1 ; y_1 = w_1x + 1,w_1 = 2\\ y_2 = w_2y_1^2,w_2 = 1; y1=w1x+1w1=2y2=w2y12w2=1;
现输入 x = 1 x = 1 x=1 ,期望输出 y 2 = 3 y_2 = 3 y2=3

代入求得: y 1 = 2 ∗ 1 + 1 = 3 y_1 = 2 * 1 + 1 = 3 y1=21+1=3 y 2 = 1 ∗ 3 2 = 10 y_2 = 1 * 3^2 = 10 y2=132=10

误差 E E E:与期望值相差 3 − 10 = − 7 3-10 = -7 310=7

误差反向传播的梯度
∂ y 2 ∂ w 2 = y 1 2 = 9 ∂ y 2 ∂ w 1 = ∂ ( w 1 x + 1 ) 2 ∂ w 1 = 2 x 2 w 1 + 2 x = 6 或 = ∂ y 2 ∂ y 1 ∂ y 1 ∂ w 1 = 2 w 2 y 1 ∗ x = 6 \frac{\partial y_2}{\partial w_2} = y_1^2 = 9 \\ \quad\\ \frac{\partial y_2}{\partial w_1} = \frac{\partial (w_1x+1)^2}{\partial w_1} = 2x^2w_1 + 2x = 6\\ 或\\ =\frac{\partial y_2}{\partial y_1}\frac{\partial y_1}{\partial w_1} = 2w_2y_1 * x= 6 w2y2=y12=9w1y2=w1(w1x+1)2=2x2w1+2x=6=y1y2w1y1=2w2y1x=6

梯度的意义:
∂ y ∂ w :当 w = w + △ w ,则 y = y + ∂ y ∂ w △ w \frac{\partial y}{\partial w}:当w = w + \bigtriangleup w,则y = y + \frac{\partial y}{\partial w}\bigtriangleup w wy:当w=w+w,则y=y+wyw

已知:
误差为 − 7 ,梯度 ∂ y 2 ∂ w 2 = 9 , ∂ y 2 ∂ w 1 = 6 误差为-7,梯度 \frac{\partial y_2}{\partial w_2} = 9,\frac{\partial y_2}{\partial w_1} =6 误差为7,梯度w2y2=9w1y2=6
故可修改( η 表示学习率,设 η = 1 \eta 表示学习率,设\eta =1 η表示学习率,设η=1 )
w 1 = w 1 + η E ∂ y 2 ∂ w 1 = 2 + 1 ∗ ( − 7 ) / 6 = 2 − 7 / 6 = 5 / 6 w 2 = w 2 + η E ∂ y 2 ∂ w 2 = 1 + 1 ∗ ( − 7 ) / 9 = 1 − 7 / 9 = 2 / 9 w_1 = w_1 + \frac{\eta E}{\frac{\partial y_2}{\partial w_1} } = 2 + 1*(-7)/6 = 2 - 7/6= 5/6\\ \quad\\ w_2 = w_2 + \frac{\eta E}{\frac{\partial y_2}{\partial w_2} } = 1 + 1 * (-7)/9 = 1-7/9 = 2/9 w1=w1+w1y2ηE=2+1(7)/6=27/6=5/6w2=w2+w2y2ηE=1+1(7)/9=17/9=2/9

w 1 , w 2 已被调整为新值, w 1 = 5 6 , w 2 = 2 9 w_1,w_2已被调整为新值,w_1 = \frac{5}{6},w_2=\frac{2}{9} w1,w2已被调整为新值,w1=65w2=92
将此值带入原式计算,
y 1 = 11 6 , y 2 = 121 162 y_1 = \frac{11}{6} , y_2 = \frac{121}{162} y1=611,y2=162121
可看到, y 2 y_2 y2从原先的 10 10 10 被调整到了 121 / 162 121/162 121/162,可以看到,通过误差反向传播确实可以修正权值 w 1 , w 2 w_1,w_2 w1,w2
但是过大的学习率会导致结果过拟合,如上,我们需要最后值为3,但修改后的值甚至小于了1。因此调整合适的学习率 η \eta η是必须的。

误差函数和激活函数

【机器学习基础】2、代价函数\损失函数汇总

误差函数

用于计算误差值 E E E

引自:https://www.cnblogs.com/go-ahead-wsg/p/12346744.html

二次代价函数

C = 1 2 n ∑ x 1 , … x n ∥ y ( x ) − a L ( x ) ∥ 2 C=\frac{1}{2 n} \sum_{x_{1}, \ldots x_{n}}\left\|y(x)-a^{L}(x)\right\|^{2} C=2n1x1,xn y(x)aL(x) 2

  • C表示代价函数
  • x表示样本
  • y表示实际值
  • a表示输出值
  • n表示样本的总数;

其中 a = σ ( z ) , z = ∑ w j ∗ x j + b a=\sigma(z), z=\sum w_j*x_j +b a=σ(z),z=wjxj+b

  • a代表激活函数的输出值
  • σ代表sigmoid函数

∂ C ∂ w = ( a − y ) σ ′ ( z ) x ∂ C ∂ b = ( a − y ) σ ′ ( z ) \frac {\partial C} {\partial w} = (a-y)\sigma' (z)x \\\quad\\ \frac {\partial C} {\partial b} = (a-y)\sigma' (z) wC=(ay)σ(z)xbC=(ay)σ(z)

注:由于反向误差梯度与sigmoid函数的导数有关,而sigmoid函数的导数会在值较大时有较小的倒数,故会导致权值调整较小。
如下图所示:
在这里插入图片描述
因此引入交叉熵代价函数

交叉熵代价函数

交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。

C = − 1 n ∑ x 1 , x n [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ] C=-\frac{1}{n} \sum_{x_{1}, x_{n}}[y \ln a+(1-y) \ln (1-a)] C=n1x1,xn[ylna+(1y)ln(1a)]

  • C表示代价函数
  • x表示样本
  • y表示实际值
  • a表示输出值
  • n表示样本的总数;
    a = σ ( z ) , z = ∑ w j ∗ x j + b σ ′ ( z ) = σ ( z ) ( 1 − σ ( x ) ) a=\sigma(z), z=\sum w_j*x_j +b\\ \quad\\ \sigma'(z) = \sigma(z)(1-\sigma (x)) a=σ(z),z=wjxj+bσ(z)=σ(z)(1σ(x))

梯度求解
∂ C ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) ∂ σ ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) σ ′ ( z ) x j = 1 n ∑ x σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) ( σ ( z ) − y ) = 1 n ∑ x x j ( σ ( z ) − y ) ∂ C ∂ b = 1 n ∑ x ( σ ( z ) − y ) \begin{aligned} \frac{\partial C}{\partial w_{j}} & =-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \frac{\partial \sigma}{\partial w_{j}} \\ & =-\frac{1}{n} \sum_{x}\left(\frac{y}{\sigma(z)}-\frac{(1-y)}{1-\sigma(z)}\right) \sigma^{\prime}(z) x_{j} \\ & =\frac{1}{n} \sum_{x} \frac{\sigma^{\prime}(z) x_{j}}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y) \\ & =\frac{1}{n} \sum_{x} x_{j}(\sigma(z)-y) \\ \frac{\partial C}{\partial b} & =\frac{1}{n} \sum_{x}(\sigma(z)-y) \end{aligned} wjCbC=n1x(σ(z)y1σ(z)(1y))wjσ=n1x(σ(z)y1σ(z)(1y))σ(z)xj=n1xσ(z)(1σ(z))σ(z)xj(σ(z)y)=n1xxj(σ(z)y)=n1x(σ(z)y)

可以看出:权值 w w w 和偏执值 b b b 的调整与 σ ′ ( z ) σ′(z) σ(z) 无关,另外,梯度公式中的 σ ( z ) − y σ(z)−y σ(z)y
表示输出值与实际值放入误差。所以当误差越大时,梯度就越大,参数w和b的调整就越快,训练的速度也就越快。

总结:当输出神经元是线性的,那么二次代价函数就是一种合适的选择。如果输出神经元是S型函数,那么比较适合交叉墒代价函数。

激活函数

激活函数类似于人类神经元,对输入信号进行线性或非线性变换。

  • M-P模型中使用step函数作为激活函数
  • 多层感知器中使用sigmoid函数,或tanh函数(双曲正切函数)
  • 最近几年在深度学习中,修正线性单元(Rectified Linear Unit,ReLU)

sigmoid函数

f ( u ) = 1 1 + e − u u = ∑ i = 1 n w i x i f(u) = \frac{1}{1+e^{-u}} \\\quad\\ u = \sum_{i=1}^nw_ix_i f(u)=1+eu1u=i=1nwixi
偏导数:
∂ f ( u ) ∂ u = f ( u ) ( 1 − f ( u ) ) \frac{\partial f(u)}{\partial u} = f(u)(1-f(u)) uf(u)=f(u)(1f(u))

RELU函数

f ( u ) = m a x ( 0 , u ) ∂ f ( u ) ∂ u = 1 f(u) = max(0,u)\\ \quad\\ \frac{\partial f(u)}{\partial u} = 1 f(u)=max(0,u)uf(u)=1

似然函数

似然函数用于计算多层感知器的输出结果,通常以softmax函数作为似然函数。

softmax函数

p ( y k ) = e x p ( u 2 k ) ∑ q = 1 Q e x p ( u 2 q ) p(y^k) = \frac{exp(u_{2k})}{\sum_{q=1}^Q exp(u_{2q})} p(yk)=q=1Qexp(u2q)exp(u2k)
softmax函数的分母是对输出层所有单元(q = 1,······,Q)的激活函数值的求和,起到归一化的作用。

随机梯度下降法

使用部分训练样本进行迭代计算,这种方法叫做随机梯度下降法(Stochastic Gradient Descent,SGD),与之相对的是批量学习方法。

批量学习方法

计算时遍历全部训练样本,设第 t t t 次迭代各训练样本误差为 E n t E_n^t Ent ,通过所有误差项计算全部训练样本误差:
E = ∑ n = 1 n E n E = \sum_{n=1}^n E_n E=n=1nEn
基于全部训练样本得到权重权重调整值并修正网络连接权重
w = w − η ∂ E ∂ w w = w - \eta \frac{\partial E}{\partial w} w=wηwE
然后使用调整后的连接权重测试全部训练样本,如此反复迭代计算权重调整并修正网络。

  • 优点:能有效抑制训练集内带噪声的样本所导致的输入模式剧烈变动
  • 缺点:每次调整连接权值,所有样本都要参与训练,所有训练时间长

在线学习

逐个输入训练样本

由于在线学习每次迭代计算一个训练样本,所以训练样本的差异会导致结果出现大幅变动。
迭代结果的变动可能导致训练无法收敛。

小批量梯度下降法

介于在线学习和批量学习之间,将训练集分成几个子集D,每次迭代使用一个子集。

小批量下降法能够缩短单次训练时间,又能降低迭代结果的变动。

由于随机梯度下降法只使用部分训练样本,每次迭代后样本集的趋势都会发生变化,所以减少了迭代结果陷入局部最优解的情况。

学习率

用来确定权重连接调整的系数。

如果学习率过大,则有可能修正过头
如果学习率较小,收敛速度会很慢。

自适应调整学习率—AdaGrad方法

用学习率除以截至当前时刻 t t t 的梯度 ▽ E \bigtriangledown E E 的累计值,得到神经网络的连接权重 w w w.

w = w − η ▽ E ( t ) ∑ i = 1 t ( ▽ E ( i ) ) 2 + ε w = w - \eta\frac{\bigtriangledown E^{(t)}}{\sqrt{ \sum_{i=1}^t(\bigtriangledown E^{(i)})^2 +}\varepsilon } w=wηi=1t(E(i))2+ εE(t)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Linux开发>驱动开发 -之-阻塞、非阻塞IO和异步通知

<Linux开发>驱动开发 -之-阻塞、非阻塞IO和异步通知 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移…

easyui01(基本布局)

一.概述 1.What? jQuery EasyUI是一组基于jQuery的UI插件集合体,能帮助web开发者更轻松的打造出功能丰富并且美观的UI界面 2.Why? ①.使用easyui 不需要写很多代码,只需要编写一些简单 HTML 标记,就可以定义用户界…

Java优先级队列源码分析

先导课程:二叉堆学习 优先级队列 1. Priority Queue 优先级队列(Priority Queue)也是队列 普通队列按照FIFO原则,也就是先进先出优先级队列按照优先级高低进行出队,比如将优先级最高的元素作为队头优先出队 基本接口和…

Vue3中Composition 其他一些API

一、 Reactive判断的API 1. isProxy 检查对象是否由reactive或者readonly创建的proxy &#xff0c;返回一个布尔值 <script setup> import { reactive, readonly, isProxy } from vuelet foo readonly({ name: WFT1 }) // 其中的属性不可修改let bar reactive({ n…

DeepSpeed结合Megatron-LM训练GPT2模型笔记(上)

文章目录 0x0. 前言0x1. Megatron使用单卡训练GPT2依赖安装准备训练数据训练详细流程和踩坑 0x2. Megatron使用单卡预测训练好的GPT2模型0x3. 参数量和显存估计参数量估计训练显存占用估计 0x4. Megatron使用多卡训练GPT2模型2卡数据并行2卡模型并行 0x5. 总结 0x0. 前言 本文…

【V4L2】 v4l2框架分析之v4l2_subdev

文章目录 一、v4l2_subdev简介二、初始化v4l2_subdev三、注册/注销subdev四、异步注册子设备 一、v4l2_subdev简介 相关源码文件&#xff1a; /include/media/v4l2-subdev.h/drivers/media/v4l2-core/v4l2-subdev.c 在linux内核中&#xff0c;许多驱动程序需要与子设备通信&…

【嵌入式linux】spi驱动加载后probe函数未执行的问题

【嵌入式linux】spi驱动加载后probe函数未执行的问题 问题描述解决办法 问题描述 嵌入式linux平台下的spi分为设备、总线和驱动&#xff0c;一般半导体原厂已经实现好了spi设备和总线的相关代码&#xff0c;开发者只需根据实际使用情况修改设备树以及编写驱动部分的代码即可。…

Android进阶 四大组件的工作过程(四):ContentProvider的工作过程

Android进阶 四大组件的工作工程&#xff08;四&#xff09;&#xff1a;ContentProvider的工作过程 导语 本篇是介绍四大组件的最后一篇文章&#xff0c;前三篇文章里我们已经介绍了Activity&#xff0c;Service以及Broadcast的工作流程&#xff0c;那么这篇文章我们就来介绍…

【数据结构与算法分析】一文搞定插入排序、交换排序、简单选择排序、合并排序的代码实现并给出详细讲解

文章目录 排序相关的基本概念排序算法及其实现插入排序直接插入排序折半插入排序希尔排序 交换排序冒泡排序快速排序 合并排序归并排序简单选择排序 算法比较 排序相关的基本概念 排序&#xff1a;将数组中所有元素按照某一顺序(从小到大或从大到小)重新排列的过程。排序算法的…

DJ2-5 内容分发网络 CDN

目录 单一的大规模数据中心 内容分发网络 CDN 单一的大规模数据中心 存在三个问题&#xff1a; ① 如果客户远离数据中心&#xff0c;服务器到客户的分组将跨越许多通信链路并很可能通过许多 ISP&#xff0c;给用户带来恼人的时延。 ② 流行的视频很可能经过相同的通信链路…

[C++11] 智能指针

长路漫漫&#xff0c;唯剑作伴。 目录 长路漫漫&#xff0c;唯剑作伴。 为什么需要智能指针 RAII 使用RAII思想管理内存 重载 * 和-> 总结一下智能指针的原理&#xff1a; C的智能指针和拷贝问题 auto_ptr (C98) ​编辑 auto_ptr的实现原理…

EmGUCV中类函数 FastFeatureDetector使用详解

FastFeatureDetector Class 释义&#xff1a;FAST&#xff08;加速检测特&#xff09;关键点检测器&#xff0c;源自 E. Rosten ("Machine learning for high-speed corner detection, 2006). 继承关系&#xff1a;Emgu.CV.Features2D.FastFeatureDetector 派生&#xff…

记录好项目D5

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是 商品信息管理系统 技术栈&#xff1a;SpringBoot Mybatis Thymelea…

MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性

\ &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭…

细谈容器化技术实现原理--以Docker为例

目录 一、Docker解决了什么 二、容器的发展过程 三、容器基础 3.1. 容器实现的原理&#xff1a; ⚠️原理详解&#xff1a; 3.1.1. Namespace 3.1.2. Cgroups 3.1.3. chroot 四、Volume 4.1. Docker是如何做到把一个宿主机上的目录或者文件&#xff0c;挂载到容器里面…

4. 数组更新检测

4.1 v-for更新监测 当v-for遍历的目标结构改变, Vue触发v-for的更新 情况1: 数组翻转 情况2: 数组截取 情况3: 更新值 口诀: 数组变更方法, 就会导致v-for更新, 页面更新 数组非变更方法, 返回新数组, 就不会导致v-for更新, 可采用覆盖数组或this.$set() 这些方法会触发数组改…

基于深度学习的高精度鸽子检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度鸽子检测识别系统可用于日常生活中或野外来检测与定位鸽子目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的鸽子目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

XSS注入——反射性XSS

xss注入的攻击步骤&#xff1a; 1.查找可能存在的注入点&#xff08;搜索框&#xff0c;留言板&#xff0c;注册&#xff09; 2.观察输出显示位置&#xff1a; html&#xff1a; 尖括号外部&#xff0c; 尖括号内部: 引号内部》闭合&#xff0…

Django | 基于pycharm的django配置52张全流程截图,红星给你一步一步的男妈妈式教学

演示版本&#xff1a;【windows系统】python3.10pycharm2023.1.2django4.2.2 &#xff08;本教程全程在虚拟机中演示&#xff0c;读者无需配置虚拟机&#xff0c;直接按教程安装即可&#xff09; 目录 1.搞到必要的安装包 2.事先准备 3.安装chrome浏览器&#xff08;也可以…

国产MCU-CW32F030开发学习--按键检测

国产MCU-CW32F030开发学习–按键检测 bsp_key 按键驱动程序用于扫描独立按键&#xff0c;具有软件滤波机制&#xff0c;采用 FIFO 机制保存键值。可以检测 如下事件&#xff1a; 按键按下。 按键弹起。 长按键。 长按时自动连发。 我们将按键驱动分为两个部分来介绍&#xff…