概念描述

神经网络是一种重要的机器学习算法,可以用于分类、聚类等多种任务。与其他传统算法不同,神经网络回归得到的模型是一个黑盒子,没有显式的公式或代数表达,但是凭借其复杂的结构,学习效果往往更优。

与其他模型求解问题一样,训练神经网络,是一个最优化问题,即找到让模型效果最好的哪些参数。为了解决这个问题,传统算法有的通过数学解析计算理论最优,有的通过启发式算法搜索效果最好。神经网络的做法,是前向传播和反向传递的组合。

前向传播,是将输入值(观测值)经过一层层的计算(包括线性计算和非线性激活)得到输出值的预测值的过程。算法开始之前,线性计算的参数W和b都是随机给出,因此预测值与真实值之间差异很大。

反向传播,是根据预测值与真实值之间的差异,调整模型参数W和b。为了保证调整参数的方向是减小这一差异,这里用到了梯度下降的原理。

通过两个步骤的不断迭代,最终预测值与真实值之间差异将足够小,神经网络的参数将达到最优。这就是模型训练的过程。下面用数学方式表达。


数学描述

记观测的输入值为 xxx, 输出为 yyy,模型预测值为 y^=f(x)\hat{y}=f(x)y^​=f(x)。
这里 f(x)f(x)f(x) 可以是简单的多项式,也可以是复杂的无法写出公示的黑盒子。x下面我们用一个一般线性函数 f(x)=wx+bf(x)=wx+bf(x)=wx+b 作为例子进行说明。

初始化神经网络模型时,f(x)f(x)f(x)的参数是随机值。对于观测值 xxx,随机参数为 w0,b0w_0, b_0w0​,b0​,计算 f(x)=w0x+b0f(x)=w_0x+b_0f(x)=w0​x+b0​就相当于进行前向传播。

此时得到的预测值肯定是不好的,为了评价预测值的准确与否,就需要损失函数。例如一种常见的损失函数是残差平方和 loss=∑i(yi^−yi)2loss=\sum_i{(\hat{y_i}-y_i)^2}loss=∑i​(yi​^​−yi​)2。

这里最优化问题就体现出来了,我们希望调整参数 w,bw,bw,b,减小损失函数 losslossloss,相当于把损失函数当做参数的函数,即 loss=g(w,b)loss=g(w,b)loss=g(w,b)。对于给定的 x0,w0,b0x_0, w_0, b_0x0​,w0​,b0​,有 g(w0,b0)=∑i(w0xi+b0−yi)2g(w_0,b_0)=\sum_i{(w_0x_i+b_0-y_i)^2}g(w0​,b0​)=∑i​(w0​xi​+b0​−yi​)2。

如何调整参数呢?由泰勒公式,知
f(x+Δx)≅f(x)+Δx∇f(x)f(x+\Delta x)\cong f(x)+\Delta x \nabla f(x) f(x+Δx)≅f(x)+Δx∇f(x),变形得
f(x+Δx)<f(x),∀Δx∇f(x)<0f(x+\Delta x) < f(x) ,\forall \ \Delta x \nabla f(x) <0 f(x+Δx)<f(x),∀ Δx∇f(x)<0,对于www这一个参数,带入上式,说明对于特定的 Δw\Delta wΔw,如果可以保证有
Δw∇g(w)<0\Delta w \nabla g(w) < 0 Δw∇g(w)<0,则有
g(w+Δw)<g(w)g(w+\Delta w) < g(w) g(w+Δw)<g(w),即将原始 w0w_0w0​ 移动了一个 Δw\Delta wΔw 后,损失函数 losslossloss 会下降。

因此计算时取
Δw=−α∇g(w)\Delta w = - \alpha \nabla g(w) Δw=−α∇g(w),其中 α\alphaα 称为学习率,是一个很小的正数,可以使得
Δw∇g(w)=−α∇g(w)2<0\Delta w \nabla g(w)=- \alpha { \nabla g(w)}^2 < 0 Δw∇g(w)=−α∇g(w)2<0,这样就可以完成任务了。

上述过程用到了梯度下降的原理,反向传播的过程本质上就成为了计算各个参数对于损失函数的梯度值,然后按照这个梯度值进行调整,理论上就可以快速达成收敛。注意,之所以不通过解析的方法,计算偏导数求极值点,是由于实际模型的复杂度很可能导致极值点难以计算,梯度下降却总是可用。

更具体的例子,可以参考pyTorch官方教程,其中手动计算的grad_a,grad_b,grad_c,grad_d正是损失函数对于各个参数的偏导数,与自动计算的结果一致,读者可以推导验证。


神经网络如何通过前向传播和后向传播实现最优化,原理就是如此。无论模型如何发展,复杂的激活函数、更多的隐藏层等等,都不会影响这一基本思想发挥作用。

【学习笔记】神经网络的基本原理相关推荐

  1. 1.2)深度学习笔记------神经网络的编程基础

    目录 1)Binary Classification 2)Logistic Regression 3)Logistic Regression Cost Function 4)Gradient Desc ...

  2. 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)

    文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...

  3. 学习笔记——CRC的基本原理与实现

    文章目录 笔记前言 一.CRC是什么? 二.CRC基本原理 1.原理介绍与练习 2.CRC-8 示例代码 总结 笔记前言 此篇是学习CRC基本原理与实现的个人学习笔记,以备未来自己复习使用,也将自己学 ...

  4. Goodfellow深度学习笔记--神经网络架构

    目录 损失函数 指标选择 交叉熵 交叉熵代码 使用最大似然的优势 损失函数的具体形式 用于高斯输出分布的线性单元 用于Bernoulli输出分布的sigmoid单元 用于Multinoulli输出分布 ...

  5. ML学习笔记- 神经网络

    神经网络 有的模型可以有多种算法.而有的算法可能可用于多种模型.在神经网络中,对外部环境提供的模式样本进行学习训练,并能存储这种模式,则称为感知器;对外部环境有适应能力,能自动提取外部环境变化特征,则 ...

  6. 花书学习笔记--神经网络实践方法论

    目录 性能度量 准确率 查准率precision和召回率recall 覆盖( coverage) 基准模型 如何判断遇到的是什么问题 Model Bias(模型偏差) Optimization Iss ...

  7. 软考:软件设计师(中级)--学习笔记02操作系统基本原理

    目录 二.操作系统基本原理 2.1进程管理 2.1.1进程的状态 2.1.2前趋图 2.1.3进程的同步与互斥:PV操作的前提 2.1.4 PV操作 2.1.5死锁问题 2.2存储管理 2.2.1页式 ...

  8. 学习笔记——神经网络压缩

    以下内容来源与李宏毅老师的课程. 文章目录 一.Network Pruning--网络剪枝 二.Knowledge Distillation--知识蒸馏 三.Parameter Quantizatio ...

  9. 深度学习笔记——神经网络(ANN)搭建过程+python代码

    目录 1.多维数组的运算 (1)多维数组 (2)矩阵乘法 (3)神经网络的内积 2.3层神经网络的实现 (1)第一层加权和 (2)输入层到第1层的信号传递 (3)第1层到第2层的信号传递 (4)完整代 ...

  10. 学习笔记之VoIP基本原理与应用

    整理日期: 2005年12月7日 VoIP基本原理与应用 概述 1995年以色列VocalTec公司所推出的Internet Phone,不但是VoIP网络电话的开端,也揭开了电信IP化的序幕.人们从 ...

最新文章

  1. ASP.NET 2.0站点登录、导航与权限管理
  2. 量子通信是不是伪科学?潘建伟这样回应
  3. java utf-8文件处理bom头
  4. Quartz.net 定时任务矿建Demo
  5. 开课吧python学费-分享一个小白也能月赚2万的新技能
  6. :架构优化在何时,方成为公司的推动力与核心竞争力
  7. NETCORE openSUSE docker 安装
  8. nginx+tomcat
  9. Codeup-问题 C: 最短路径
  10. [JLOI2015]战争调度
  11. 华为客户端优化建议(应用保活相关)
  12. 数学建模-7.多元线性回归分析
  13. php mysql过滤特殊字符_php特殊字符过滤,html标签处理
  14. 显卡测试软件硬盘版怎么安装,显卡检测软件(Alexander)
  15. react自定义鼠标右键菜单
  16. 交换机基本原理和配置
  17. table元素无法固定列宽,width设置无效
  18. EXCEL表格单元格中有数字和文字怎么将数字部分提取出来
  19. 团队作业8——Beta 阶段冲刺6th day
  20. canal同步mysql到es

热门文章

  1. 【复现1】CADTransformer: Panoptic Symbol Spotting Transformer for CAD Drawings
  2. 《从点子到产品:产品经理的价值观与方法论》读书报告
  3. linux系统dmesg日志,Linux系统日志
  4. crossDomain、allowDomain()、allowScriptAccess三者的关系
  5. [转](2条消息) 分享8个有趣的python小玩具
  6. 基于JAVA音乐网站的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  7. NestJs CROS 跨域设置
  8. 手把手教你用Python直观查看贵州茅台股票交易数据,文末送书!
  9. [乐意黎转载]依依服装店某一天将两件不同的衣服均以每件120元出售,结果一件赚20%,另一件赔20%,那么商店老板是赚了,还是亏了?赚(亏)了多少元?
  10. ZK7.0.3中从MongoDB下载文件