简单神经网络的“来龙去脉”

简单神经网络的“来龙去脉”

众所周知,神经网络1有两次传播:正向输出结果,反向修正权重。
我们可以摆脱数学的约束,来看看正向传播和反向传播中的某些关键。

正向传播

神经网络如何处理输入的原始数据并得到较为准确的结果?个人理解,通过神经网络节点之间的权重以及激活函数。
权重对数据做出了相关的“选择”,可以“分辩”传递的数据,“选择”更重要的数据。举个例子:

人看苹果时不太会说:苹果是甜的;人尝完苹果后不太会说:苹果是红的。
因为视觉会通过相关的神经细胞处理,味觉会通过相关的神经细胞处理

数据通过权重的选择后,输入某一节点并通过激活函数输入到下一层或输出层。

其中的激活函数,通过适当的调整之后,也可以“选择”数据对下一层的影响程度。举例子:

同样一个面试者,面对一个严苛的面试官,一个宽松的面试官。那么面试者进入复试的可能性也会不一样。

反向传播

此处的传播并非再是正向所传播的数据,而是误差值。因为初始化神经网络中权重的不准确,导致如上所述的数据选择错误。通过反向传播误差,用于对权重进行更正(也就是引入梯度下降算法的理由)。传播过程可以直观的理解为,误差值作为输入值,不断通过“正向传播”传入至下一层(不需要激活函数进行处理),直到求出所有节点的误差值。在该过程里中间层的误差,显然是难以表述的,因而难以定义其产生误差方式。一种解决思路是:某一误差值通过权重的大小将误差分配给不同节点;某一节点对不同的传入误差进行求和表示为该节点的误差。举例子:

两个玩家对哥布林分别发起一次攻击并使其受到伤害。玩家小明的单次攻击力大> 于玩家小亮,那么我们可以直观的认为哥布林的大部分伤害来自小明,而只有少> 部分来自小亮。

同场游戏中,小明和小亮又斩杀了哥布林的头领。那么,在游戏结束计算小明给所有哥布林的伤害时,就要分别计算对哥布林以及其头领的伤害并求和。

此时,我们考虑一下为什么出发?我们的目的是为了更正权重。

梯度下降算法为何混入其中

我们已经知道神经网络里存在误差,引起误差的是权重。这可以理解为:只要权重选择合适,那么误差就会最小。梯度下降算法正是用于求解最小值的。现在我们知道为什么引入梯度下降算法了,那如何利用它来更新权重?神经网络是一个复杂的函数表达式,我们可以从 y = k x y= kx y=kx来理解。我们选择合适的k值便能找到合适的表达式进行分类或拟合。

y = k x y = kx y=kx,表示所需的函数

y ′ = k ′ x y' = k'x y=kx,表示现有的函数

那么两者相减就是误差: Δ y = y − y ′ = ( k − k ′ ) x = Δ k x \Delta y = y - y' = (k-k')x = \Delta k x Δy=yy=(kk)x=Δkx

Δ k = Δ y x \Delta k = \frac{\Delta y}{x} Δk=xΔy

最后,可以使用上面的表达式来接近所需的函数: k n e w = k ′ + α Δ k ,   y = k n e w x k_{new} = k' + \alpha \Delta k,\ y = k_{new}x knew=k+αΔk, y=knewx,其中的 α \alpha α防止斜率变动过大。

类似上面将 k k k作为自变量,由于复杂函数中没有 Δ k = Δ y x \Delta k = \frac{\Delta y}{x} Δk=xΔy这样的明显的关系,因此,选择对误差函数中的某一权重求偏导数(类似 x = Δ y Δ k = d y d k x = \frac{\Delta y}{\Delta k} = \frac{dy}{dk} x=ΔkΔy=dkdy)用于更正权重。

因此,得到 W n e w = W o l d − α ∂ E ∂ W W_{new} = W_{old} - \alpha\frac{\partial E}{\partial W} Wnew=WoldαWE,将得到的新权重用于正向传播得到结果,并再次使用反向传播更正权重,知道误差最小。

具体实现

输入数据不宜太小或太大,计算机会损失精度。(输入数据为零时,处理为 0.01 0.01 0.01,输出不能得到 [ 0.0 ,   1.0 ] [0.0,\ 1.0] [0.0, 1.0]则处理为 [ 0.01 ,   0.99 ] [0.01,\ 0.99] [0.01, 0.99]

关于随机初始权重,数学家的建议是:可以在一个节点传入链接数量平方根倒数的大致范围内随机采样。(每个节点具有 n n n条传入链接,那么初始权重范围 [ − 1 n , 1 n ] [-\frac{1}{\sqrt n},\frac{1}{\sqrt n}] [n 1,n 1]

代码实现流程2

  1. 框架代码
  2. 初始化网络(定义神经网络形状和尺寸)
  3. 初始化权重
  4. 训练网络(输出计算值并更新权重)
  5. 准备测试数据并测试网络
  6. 改进模型(调整学习率、多次运行、改变网络形状)


  1. 《Python神经网络编程》[英]塔里克.拉希德(Tariq Rashid)著, 林赐 译 ↩︎

  2. https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server是一种关系型数据库管理系统,由Microsoft公司开发。它使用SQL语言进行数据管理和查询。以下是SQL Server的来龙去脉系列: 1. SQL Server的历史:SQL Server最初是由Sybase公司开发的,后来由Microsoft公司收购并继续开发。自1993年以来,Microsoft一直在开发和发布新版本的SQL Server。 2. SQL Server的版本:SQL Server有多个版本,包括Express、Standard、Enterprise和Developer等版本。每个版本都有不同的功能和限制。 3. SQL Server的体系结构:SQL Server的体系结构包括数据库引擎、分析服务、集成服务和报告服务等组件。数据库引擎是SQL Server的核心组件,用于存储和管理数据。 4. SQL Server的安全性:SQL Server提供了多种安全功能,包括身份验证、授权和加密等。它还支持Windows身份验证和SQL Server身份验证。 5. SQL Server的高可用性:SQL Server提供了多种高可用性功能,包括复制、日志传送、数据库镜像和AlwaysOn可用性组等。 6. SQL Server的性能优化:SQL Server提供了多种性能优化功能,包括索引、分区、查询优化器和内存优化等。 7. SQL Server的监视和管理:SQL Server提供了多种监视和管理工具,包括SQL Server Management Studio、SQL Server Profiler和Dynamic Management Views等。 8. SQL Server的开发:SQL Server支持多种编程语言和开发工具,包括.NET Framework、Visual Studio和PowerShell等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值