热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

深度学习入门(9)神经网络Affine与Softmax层的计算图表示方式及其误差反向传播的代码实现

《深度学习入门》系列文章目录深度学习入门(1)感知机深度学习入门(2)神经网络深度学习入门(3)神经网络参数梯度的计算方式深

 《深度学习入门》系列文章目录

深度学习入门 (1)感知机

深度学习入门(2)神经网络

深度学习入门(3)神经网络参数梯度的计算方式

深度学习入门(4)【深度学习实战】无框架实现两层神经网络的搭建与训练过程

深度学习入门(5)如何对神经网络模型训练结果进行评价

深度学习入门(6)误差反向传播基础---计算图与链式法则使用

深度学习入门(7)误差反向传播计算方式及简单计算层的实现

深度学习入门(8)激活函数ReLU和 Sigmoid的计算图表示方式及其误差反向传播的代码实现



前几篇博文介绍了计算图基础、简单层的实现以及激活函数的层实现。本篇文章主要介绍神经网络中Affine层与sofmax层的计算图及其反向传播层的代码实现。

目录

1 Affine与Softmax层的实现

1.1 Affine层

1.2 批量版的Affine层

1.3 Softmax-with-Loss层




1 Affine与Softmax层的实现


1.1 Affine层

神经元的加权和可以用 Y = np.dot(X, W) + B计算出来。然后,Y 经过激活函数转换后,传递给下一层。这就是神经网络正向传播的流程。

神经网络的正向传播中进行的矩阵的乘积运算在几何学领域被称为仿射变换 。将进行仿射变换的处理实现为“Affine

 

Y = np.dot(X, W) + B,计算图如下:

 

 式中WTT表示转置。转置操作会把W的元素(i, j)换成元素(j, i)

 

 X和αL/αX形状相同, WαL/αW形状相同。从下面的数学式可以很明确地看出X
αL/αX形状相同。


1.2 批量版的Affine层

前面介绍的Af ne层的输入X是以单个数据为对象的。现在我们考虑N个数据一起进行正向传播的情况,也就是批版本的Affine层。

 

 

 

 


1.3 Softmax-with-Loss层

softmax函数会将输入值正规化之后再输出。比如手写数字识别时, Softmax层的输出如图所示。


 注:神经网络中进行的处理有推理inference)和学习两个阶段。神经网络的推理通常不使用Softmax层。比如,用图5-28的网络进行推理时,会将最后一个Affine层的输出作为识别结果。神经网络中未被正规化的输出结果(上图中 Softmax 层前面的 Affine 层的输出)有时被称为得分。也就是说,当神经网络的推理只需要给出一个答案的情况下,因为此时只对得分最大值感兴趣,所以不需要Softmax层。不过,神经网络的学习阶段则需要Softmax层。


下面来实现Softmax层。考虑到这里也包含作为损失函数的交叉熵误差( cross entropy error),所以称为 Softmax-with-Loss Softmax-withLoss层( Softmax函数和交叉熵误差的计算图如下图所示。

注意:交叉熵函数中的log是默认以e为底的。

 

计算图简化版:

 

softmax函数记为Softmax层,交叉熵误差记为Cross Entropy Error层。这里假设要进行3类分类,从前面的层接收3个输入(得分)。如图5-30所示, Softmax层将输入( a1, a2, a3)正规化,输出( y1,y2, y3)。 Cross Entropy Error层接收Softmax的输出( y1, y2, y3)和教师标签( t1,t2, t3),从这些数据中输出损失L

Softmax层的反向传播得到了( y1 - t1, y2 - t2, y3 - t3)这样漂亮的结果。由于( y1, y2, y3)是Softmax层的输出,( t1, t2, t3)是监督数据,所以( y1 - t1, y2 - t2, y3 - t3)是Softmax层的输出和教师标签的差分。神经网络的反向传播会把这个差分表示的误差传递给前面的层,这是神经网络学习中的重要性质。


注:使用交叉熵误差作为 softmax 函数的损失函数后,反向传播得到( y1 - t1, y2 - t2, y3 - t3)这样漂亮的结果。实际上,这样漂亮”  的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。回归问题中输出层使用恒等函数,损失函数使用平方和误差,也是出于同样的理由(3.5节)。也就是说,使用平方和误差作为恒等函数的损失函数,反向传播才能得到( y1 -t1, y2 - t2, y3 - t3)这样漂亮的结果。


softmax-with-Loss层的代码实现:

请注意反向传播时,将要传播的值除以批的大小( batch_size)后,传递给前面的层的是单个数据的误差。

如果内容对你有帮助,感谢点赞+关注哦!


更多干货内容持续更新中…



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
author-avatar
StormyXin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有