神经网络入门——15反向传播(代码片段)

一起来看流星雨 一起来看流星雨     2022-11-06     353

关键词:

反向传播

如何让多层神经网络学习呢?我们已了解了使用梯度下降来更新权重,反向传播算法则是它的一个延伸。以一个两层神经网络为例,可以使用链式法则计算输入层-隐藏层间权重的误差。

要使用梯度下降法更新隐藏层的权重,你需要知道各隐藏层节点的误差对最终输出的影响。每层的输出是由两层间的权重决定的,两层之间产生的误差,按权重缩放后在网络中向前传播。既然我们知道输出误差,便可以用权重来反向传播到隐藏层。

例如,输出层每个输出节点 kk 的误差是 \\delta^o_kδko ,隐藏节点 jj 的误差即为输出误差乘以输出层-隐藏层间的权重矩阵(以及梯度)。

 
 

然后,梯度下降与之前相同,只是用新的误差:

 
 

其中 w_ij 是输入和隐藏层之间的权重, x_i 是输入值。这个形式可以表示任意层数。权重更新步长等于步长乘以层输出误差再乘以该层的输入值。

 
 

现在,你有了输出误差,\\delta_output,便可以反向传播这些误差了。V_in 是该层的输入,比如经过隐藏层激活函数的输出值。

 

范例

以一个简单的两层神经网络为例,计算其权重的更新过程。假设该神经网络包含两个输入值,一个隐藏节点和一个输出节点,隐藏层和输出层的激活函数都是 sigmoid,如下图所示。(注意:图底部的节点为输入值,图顶部的 \\hat yy^为输出值。输入层不计入层数,所以该结构被称为两层神经网络。)

 
 

反向传播练习

接下来你将用代码来实现一次两个权重的反向传播更新。我们提供了正向传播的代码,你来实现反向传播的部分。

要做的事

  • 计算网络输出误差
  • 计算输出层误差项
  • 用反向传播计算隐藏层误差项
  • 计算反向传播误差的权重更新步长
def sigmoid(x):
    """
    Calculate sigmoid
    """
    return 1 / (1 + np.exp(-x))


x = np.array([0.5, 0.1, -0.2])
target = 0.6
learnrate = 0.5

weights_input_hidden = np.array([[0.5, -0.6],
                                 [0.1, -0.2],
                                 [0.1, 0.7]])

weights_hidden_output = np.array([0.1, -0.3])

## Forward pass
hidden_layer_input = np.dot(x, weights_input_hidden)
hidden_layer_output = sigmoid(hidden_layer_input)

output_layer_in = np.dot(hidden_layer_output, weights_hidden_output)
output = sigmoid(output_layer_in)

## Backwards pass
## TODO: Calculate output error
error = target - output

# TODO: Calculate error term for output layer
output_error_term = error * output * (1 - output)

# TODO: Calculate error term for hidden layer
hidden_error_term = np.dot(output_error_term, weights_hidden_output) * \\
                    hidden_layer_output * (1 - hidden_layer_output)

# TODO: Calculate change in weights for hidden layer to output layer
delta_w_h_o = learnrate * output_error_term * hidden_layer_output

# TODO: Calculate change in weights for input layer to hidden layer
delta_w_i_h = learnrate * hidden_error_term * x[:, None]

print(\'Change in weights for hidden layer to output layer:\')
print(delta_w_h_o)
print(\'Change in weights for input layer to hidden layer:\')
print(delta_w_i_h)

 

 

python深度学习入门-误差反向传播法(代码片段)

深度学习入门-误差反向传播法博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!目录摘要1.计算图1.1 用计算图求解1.2 局部计... 查看详情

反向传播神经网络入门

...ttp://www.hankcs.com/ml/back-propagation-neural-network.html单个神经元神经网络是多个“神经元”(感知机)的带权级联,神经网络算法可以提供非线性的复杂模型,它有两个参数:权值矩阵{Wl}和偏置向量{bl},不同于感知机的单一向量形式... 查看详情

反向传播算法(代码片段)

...是我们如何确定各个神经元的权重,或者如何说训练一个神经网络。在传统机器学习算法中我们会使用梯度下降算法来做权重更新:[ heta_j:= heta_j-alphafracdeltadelta heta_jJ(θ)]即使用输出值构造一个损失函数,然后以权重为自变量,... 查看详情

反向传播神经网络(bpnn)的实现(python,附源码及数据集)(代码片段)

...录一、理论基础1、前向传播2、反向传播3、激活函数4、神经网络结构二、BP神经网络的实现1、训练过程(BPNN.py)2、测试过程(test.py)3、测试结果4、参考源码及实验数据集一、理论基础反向传播神经网络(BP... 查看详情

反向传播与梯度下降详解(代码片段)

一,前向传播与反向传播1.1,神经网络训练过程神经网络训练过程是:先通过随机参数“猜“一个结果(模型前向传播过程),这里称为预测结果$a$;然后计算$a$与样本标签值$y$的差距(即损失函数的计算过程);随后通过反向... 查看详情

深度学习入门2022最新版深度学习简介(代码片段)

...器学习是什么深度学习是什么机器学习和深度学习的区别神经网络机器学习实现二分类神经网络实现二分类TensorFlowPyTorch神经网络的原理张量张量最小值(补充)张量最大值(补充)前向传播损失计算反向传播梯度下降案例线性回归公... 查看详情

一文弄懂神经网络中的反向传播法——backpropagation(代码片段)

...是补充的又是错的,难怪觉得有问题。反向传播法其实是神经网络的基础了,但是很多人在学的时候总是会遇到一些问题,或者看到大篇的公式觉得好像很难就退缩了,其实不难,就是一个链式求导法则反复用。 查看详情

pytorch入门pytorch神经网络工具(代码片段)

Pytorch神经网络工具前向传播反向传播神经网络工具箱nnnn.Modulenn.funtional优化器动态修改学习率核心组件层:神经网络的基本结构,将输入张量幻化为输出张量模型:层组成的网络损失函数:参与学习的目标函数... 查看详情

详解神经网络中反向传播和梯度下降(代码片段)

摘要:反向传播指的是计算神经网络参数梯度的方法。本文分享自华为云社区《反向传播与梯度下降详解》,作者:嵌入式视觉。一,前向传播与反向传播1.1,神经网络训练过程神经网络训练过程是:先通... 查看详情

机器学习之五:神经网络反向传播算法(代码片段)

一、逻辑回归的局限在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字。但所使用的是一个一阶的模型,并没有使用多项式,为什么?可以设想一下,在原有400个特征的数据样本中,增加二次、三次、... 查看详情

cs224nwinter2022反向传播神经网络依存分析(附assignment2答案)(代码片段)

CS224NWINTER2022(一)词向量(附Assignment1答案)CS224NWINTER2022(二)反向传播、神经网络、依存分析(附Assignment2答案)CS224NWINTER2022(三)RNN、语言模型、梯度消失与梯度爆炸࿰ 查看详情

cs224nwinter2022反向传播神经网络依存分析(附assignment2答案)(代码片段)

CS224NWINTER2022(一)词向量(附Assignment1答案)CS224NWINTER2022(二)反向传播、神经网络、依存分析(附Assignment2答案)CS224NWINTER2022(三)RNN、语言模型、梯度消失与梯度爆炸࿰ 查看详情

中英字幕andrejkarpathy|详解神经网络和反向传播(基于micrograd)-知识点目录(代码片段)

【中英字幕】AndrejKarpathy|详解神经网络和反向传播(基于micrograd)1.Micrograd概述2.一元函数导数“andthenwepluginxequals3sothat’s”“然后代入x=3得到”“respecttoabandc”“关于a、b和c的导数”3.为单个算子实现反向函数-[1:09:02]... 查看详情

详解反向传播算法(小白版)(代码片段)

反向传播算法在神经网络中站很大的地位,大多数神经网络都能用反向传播算法进行训练,但不少初学者不容易弄懂(比如说我),所以写个小白版教程很有必要(这里不讲前向传播,可自行寻找相关信息)首先先规定一些宏:LS:神经网络的... 查看详情

神经网络学习:计算图(代码片段)

在实际使用的时候,神经网络是很复杂的,要借助计算图才能使其条理清晰,让复杂的事情变的直观便于研究。神经网络的计算是有一个前向传播以及一个反向传播构成的。先通过前向传播计算出预测结果以及损失;然后再通过... 查看详情

深度学习正向传播反向传播和计算图(backprop)(代码片段)

...模型解释正向传播和反向传播。正向传播正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。为简单起见,假设输入是一个特征为x∈Rd\\boldsymbolx\\in\\mathbbR^dx∈Rd... 查看详情

alexeyabdarknet框架解析四,网络的前向传播和反向传播介绍以及layer的详细解析(代码片段)

这个AlexeyABDarkNet框架解析在AlexeyAB的DarkNet源码上会做大量注释,我克隆该工程然后添加注释,注释版DarkNet工程地址为:https://github.com/GiantPandaCV/darknet前言前面我们已经成功的获取了目标检测的网络结构(cfg文件的内容)... 查看详情

人工智能作业2(代码片段)

...(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法ÿ 查看详情