1.3)深度学习笔记------浅层神经网络

目录

1)Neural Network Overview

2)Neural Network Representation

3)Computing a Neural Network’s Output(重点)

4)Vectorizing across multiple examples

5)Activation functions

6)Why need a nonlinear activation function

7)Derivatives of activation functions

8)Gradient descent for neural networks(重点)

9)Backpropagation intuition(选修)(掌握)

10)Random Initialization

11)Summary


以下笔记是吴恩达老师深度学习课程第一门课第三周的的学习笔记:Shallow neural networks。笔记参考了黄海广博士的内容,在此表示感谢。 


1)Neural Network Overview

本周我们开始学习如何实现一个神经网络。现在我们开始快速浏览一下如何实现神经网络,上周我们讨论了逻辑回归。神经网络的结构与逻辑回归类似,神经网络可以看作是多个sigmoid单元堆叠而成。下图中上方为单个sigmoid单元,而另一个就是神经网络了。在这个神经网络里首先对应的3个节点,计算第一层网络中各个节点的输出z^{[1]},紧接着计算a^{[1]},位于第二层的节点计算z^{[2]}a^{[2]}。整个过程如下:

第一层:输入层到隐藏层

z^{[1]} = (w^{[1]})^Tx+b^{[1]}

a^{[1]} = \sigma(z^{[1]})

第一层:隐藏层到输出层

z^{[2]} = (w^{[2]})^Ta^{[1]}+b^{[2]}

a^{[2]} = \sigma(z^{[2]})

在这里,我们规定方括号上标 [i] 表示当前所处的层数。


2)Neural Network Representation

我们再来看看我们上一小节中的二层神经网络图片(一般规定输入层为零层),下图中的神经网络包含一个隐藏层。输入特征被称作神经网络的输入层(the input layer)。 神经网络的隐藏层(a hidden layer)“隐藏”的含义是在训练集中,这些中间节点的真正数值是无法看到的。输出层(the output layer)负责输出预测值。

在写法上,我们通常把输入特征记为a^{[0]},隐藏层记为a^{[1]},隐藏层包含四个节点,从上往下,下标依次递增。隐藏层写成矩阵向量形式为:

最后,输出层为a^{[2]}。隐藏层和输出层都是带有参数 W 和 b 的。它们都使用上标[1]来表示是和第一个隐藏层有关,或者上标[2]来表示是和输出层有关。


3)Computing a Neural Network’s Output(重点)

介绍完神经网络的表示,现在我们来推导神经网络的推导过程,我们就把两层神经网络看作是两次计算逻辑回归。逻辑回归计算分为两个部分,分别计算 z 和 a。

回到两层的神经网络,我们从隐藏层的第一个神经元开始计算,如上图第一个最上面的箭头所指。从上图可以看出,输入与逻辑回归相似,这个神经元的计算与逻辑回归一样分为两步,小圆圈代表了计算的两个步骤。

  •  第一步,计算 z^{[1]}_1 = w^{[1]T}_1x + b^{[1]}_1
  •  第二步,通过激活函数计算 a^{[1]}_1 = \sigma(z^{[1]}_1) 。

隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到 a^{[1]}_2 ,a^{[1]}_3,a^{[1]}_4,详细结果见下:

z^{[1]}_1 = w^{[1]T}_1x + b^{[1]}_1, a^{[1]}_1 = \sigma(z^{[1]}_1)

z^{[1]}_2 = w^{[1]T}_2x + b^{[1]}_2, a^{[1]}_2 = \sigma(z^{[1]}_2)

z^{[1]}_3 = w^{[1]T}_3x + b^{[1]}_3, a^{[1]}_3 = \sigma(z^{[1]}_3)

           z^{[1]}_4 = w^{[1]T}_4x + b^{[1]}_4, a^{[1]}_4 = \sigma(z^{[1]}_4)           

从隐藏层到输出层的计算公式为:

z^{[2]} = w^{[2]T}a^{[1]} + b^{[2]}, a^{[2]} = \sigma(z^{[2]})

其中a^{[1]}为:

值得注意的是层与层之间参数矩阵的规格大小。

  • 输入层和隐藏层之间:{(w^{[1]})}^T的 shape 为(4,3),前面的 4 是隐藏层神经元的个数,后面的 3 是输入层神经元的个数;b^{[1]}的 shape 为(4,1),和隐藏层的神经元个数相同。
  • 隐藏层和输出层之间:{(w^{[2]})}^T的 shape 为(1,4),前面的 1 是输出层神经元的个数,后面的 4 是隐藏层神经元的个数;b^{[2]}的 shape 为(1,1),和输出层的神经元个数相同。

为了提高程序运算速度,我们引入向量化和矩阵运算的思想,将上述表达式转换成矩阵运算的形式:


4)Vectorizing across multiple examples

上一部分我们只是介绍了单个样本的神经网络正向传播的运算过程。而对于m个训练样本,我们也可以使用矩阵相乘的形式来提高计算效率。而且它的形式与上一部分单个样本的矩阵运算十分相似,比较简单。先来看使用for循环计算多个样本输出:

上图中,我们使用for循环计算了神经网络的输出,现在我们把上面的for循环写成矩阵运算的形式:

Z^{[1]} = W^{[1]}X+b^{[1]}

A^{[1]}=\sigma(Z^{[1]})

Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}

A^{[2]}=\sigma(Z^{[2]})

从水平上看,矩阵A代表了各个训练样本。从竖直上看,矩阵A的不同的索引对应于不同的隐藏单元。对于矩阵Z,X情况也类似,水平方向上,对应于不同的训练样本;竖直方向上,对应不同的输入特征,而这就是神经网络输入层中各个节点。神经网络上通过在多样本情况下的向量化来使用这些等式。


5)Activation functions

之前我们都是选用 sigmoid 函数作为激活函数,但有时其他函数的效果会好得多。 下面我们来总结深度学习中常见的激活函数:

sigmoid函数:对出输出层的激活函数,因为二分类取值范围在(0,1),一般会选择sgmoid函数。

tanh函数:效果几乎总比 sigmoid 函数好(除二元分类的输出层,因为我们希望输出的结果介于 0 到 1 之间),因为函数输出介于 -1 和 1 之间,激活函数的平均值就更接近 0,有类似数据中心化的效果。

然而,tanh 函数存在和 sigmoid 函数一样的缺点:当 z 趋紧无穷大(或无穷小),导数的梯度(即函数的斜率)就趋紧于 0,这使得梯度算法的速度大大减缓。

ReLU函数:当 z > 0 时,梯度始终为 1,从而提高神经网络基于梯度算法的运算速度,收敛速度远大于 sigmoid 和 tanh。然而当 z < 0 时,梯度一直为 0,但是实际的运用中,该缺陷的影响不是很大。

Leaky ReLU函数:Leaky ReLU 保证在 z < 0 的时候,梯度仍然不为 0。理论上来说,Leaky ReLU 有 ReLU 的所有优点,但在实际操作中没有证明总是好于 ReLU,因此不常用。


6)Why need a nonlinear activation function

为什么神经网络需要非线性激活函数?事实证明:要让你的神经网络能够计算出有趣的函数,你必须使用非线性激活函数。

假设所有的激活函数都是线性的,为了简化计算,我们直接令激活函数g(z)=z,即a=z。那么,浅层神经网络的各层输出为:

                                                                                                z^{[1]} = (w^{[1]})^Tx+b^{[1]}

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        a^{[1]} =z^{[1]}

                                                                                                  z^{[2]} = (w^{[2]})^Ta^{[1]}+b^{[2]}

                                                                                     ​​​​​​​        ​​​​​​​        ​​​​​​​   a^{[2]} = z^{[2]}

                                                                                          

对上式化简得:

a^{[2]} = z^{[2]} = W^{[2]}(W^{[1]}x + b^{[1]}) + b^{[2]}=W^{[2]}W^{[1]}x + W^{[2]}b^{[1]} + b^{[2]}=W^{'}x + b^{'}

输出仍是输出x的线性组合,使用线性函数作为激活函数,最终的输出仍然是输入x的线性模型。


7)Derivatives of activation functions

在梯度下降反向计算过程中少不了计算激活函数的导数。

我们先来看一下sigmoid函数的导数:

                                      

  •                    

    g(z) = \frac{1}{1+e^{-z}},g\prime(z)=\frac{dg(z)}{dz} = \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=g(z)(1-g(z))

tanh函数的导数:

g(z) = tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}

\frac{d}{​{d}z}g(z) = 1 - (tanh(z))^{2}

ReLU函数的导数:                             

g(z) = max(0, z)

Leaky ReLU函数导数:                    


8)Gradient descent for neural networks(重点)

现在我们来看卡在神经网络中如何计算梯度。还是我们前面提到的二层神经网络,你的单隐层神经网络会有W^{[1]}b^{[1]}W^{[2]}b^{[2]}这些参数,还有个n_x表示输入特征的个数,n^{[1]}表示隐藏单元个数,n^{[2]}表示输出单元个数。

二层神经网络的正向传播过程为:

​​​​​​​Z^{[1]} = W^{[1]}X+b^{[1]}

A^{[1]}=\sigma(Z^{[1]})

Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}​​​​​​​

A^{[2]}=\sigma(Z^{[2]})

反向传播是计算梯度的过程,这里我们直接给出损失函数对各个参数的梯度:左边是梯度下降公式,右边是其向量化代码。


9)Backpropagation intuition(选修)(掌握)

这一节虽然是选修内容,但还是希望大家掌握,当然不理解也不要紧。

我们仍然使用计算图的方式来推导神经网络反向传播过程。记得之前介绍逻辑回归时,我们就引入了计算图来推导正向传播和反向传播,其过程如下图所示:

由于多了一个隐藏层,神经网络的计算图要比逻辑回归的复杂一些,如下图所示。对于单个训练样本,正向过程很容易,反向过程可以根据梯度计算方法逐一推导。


10)Random Initialization

如果在初始时将两个隐藏神经元的参数设置为相同的大小,那么两个隐藏神经元对输出单元的影响也是相同的,通过反向梯度下降去进行计算的时候,会得到同样的梯度大小,所以在经过多次迭代后,两个隐藏层单位仍然是对称的。无论设置多少个隐藏单元,其最终的影响都是相同的,那么多个隐藏神经元就没有了意义。

在初始化的时候,W 参数要进行随机初始化,不可以设置为 0。而 b 因为不存在对称性的问题,可以设置为 0。

以 2 个输入,2 个隐藏神经元为例:

W = np.random.rand(2,2)* 0.01
b = np.zeros((2,1))

这里将 W 的值乘以 0.01(或者其他的常数值)的原因是为了使得权重 W 初始化为较小的值,这是因为使用 sigmoid 函数或者 tanh 函数作为激活函数时,W 比较小,则 Z所得的值趋近于 0,梯度较大,能够提高算法的更新速度。而如果 W 设置的太大的话,得到的梯度较小,训练过程因此会变得很慢。

ReLU 和 Leaky ReLU 作为激活函数时不存在这种问题,因为在大于 0 的时候,梯度均为 1。


11)Summary

本节课主要介绍了浅层神经网络。

  1. 首先,我们简单概述了神经网络的结构:包括输入层,隐藏层和输出层;
  2. 然后,我们以计算图的方式推导了神经网络的正向传播,并以向量化的形式归纳出来;
  3. 接着,介绍了不同的激活函数并做了比较,实际应用中根据不同需要选择合适的激活函数。激活函数必须是非线性的;
  4. 然后,我们重点介绍了神经网络的反向传播过程以及各个参数的导数推导;
  5. 最后,介绍了权重随机初始化的重要性,必须对权重W进行随机初始化操作。

下面我们就要进行深层神经网络的学习了。

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

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

相关文章

SpringMVC 的执行流程

SpringMVC 的执行流程 1&#xff09;用户向服务器发送请求&#xff0c;请求被 Spring 前端控制 Servelt DispatcherServlet捕获&#xff1b; 2&#xff09;DispatcherServlet 对请求 URL 进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;。然后根据该 URI&…

kafka初识

kafka中文文档 本文环境&#xff1a;ubuntu:18.04 kafka安装、配置与基本使用(单节点) 安装kafka 下载 0.10.0.1版本并解压缩 > tar -xzf kafka_2.11-0.10.0.1.tgz > cd kafka_2.11-0.10.0.1.tgzkafka简单配置 > vi config/server.properties主要注意三个地方&a…

1.4)深度学习笔记------深层神经网络

目录 1&#xff09;Deep L-layer neural network 2&#xff09;Forward Propagation in a Deep Network(重点) 3&#xff09;Getting your matrix dimensions right 4&#xff09;Building blocks of deep neural networks 5&#xff09;Forward and Backward Propagation…

Struts1工作原理

Struts1工作原理图 1、初始化&#xff1a;struts框架的总控制器ActionServlet是一个Servlet&#xff0c;它在web.xml中配置成自动启动的Servlet&#xff0c;在启动时总控制器会读取配置文件(struts-config.xml)的配置信息&#xff0c;为struts中不同的模块初始化相应的对象。(面…

【洛谷 - P1772 】[ZJOI2006]物流运输(dp)

题干&#xff1a; 题目描述 物流公司要把一批货物从码头A运到码头B。由于货物量比较大&#xff0c;需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线&#xff0c;以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在&am…

RabbitMQ初识

官方介绍 - 中文 本文环境&#xff1a;ubuntu:20.04 RabbitMQ安装、配置与基本使用 安装RabbitMQ # 简易脚本安装 curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash sudo apt-get install rabbitmq-server -y --f…

Apollo进阶课程 ⑦ | 高精地图的采集与生产

目录 1.高精地图采集过程中需要用到的传感器 1.1&#xff09;GPS 1.2&#xff09;IMU 1.3&#xff09;轮速计 2.高精地图采集过程中的制图方案 2.1&#xff09;方案一 激光雷达 2.2&#xff09;Camera融合激光雷达 原文链接&#xff1a;Apollo进阶课程 ⑦ | 高精地图的采…

你看不懂的spring原理是因为不知道这几个概念

背景 问题从一杯咖啡开始。 今天我去楼下咖啡机买了一杯「粉黛拿铁」。制作过程中显示&#xff1a; 我取了做好的粉黛拿铁&#xff0c;喝了一口&#xff0c;果然就是一杯热巧克力。咦咦咦&#xff0c;说好的拿铁呢&#xff1f;虽然我对「零点吧」的咖啡评价很高&#xff0c;觉…

EasyOcr 安装(linux、docker)、使用(gin、python)

EasyOcr git地址 EasyOCR是一款用python语言编写的OCR第三方库&#xff0c;同时支持GPU和CPU&#xff0c;目前已经支持超过70种语言. 安装(CPU) 注意&#xff1a; 本文是在仅在cpu下使用。如要使用CUDA版本&#xff0c;请在pytorch网站上选择正确的&#xff0c;并关闭此文章。…

Python之Numpy入门实战教程(2):进阶篇之线性代数

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库&#xff0c;今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心&#xff0c;它还包含有用的线性代数&#xff0c;傅里叶变换和随机数函数。 本文主要介绍Numpy库…

【牛客 - 369F】小D的剑阵(最小割建图,二元关系建图,网络流最小割)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/369/F 来源&#xff1a;牛客网 题目描述 现在你有 n 把灵剑&#xff0c;其中选择第i把灵剑会得到的 wiw_iwi​ 攻击力。 于此同时&#xff0c;还有q个约束&#xff0c;每个约束形如&#xff1a; …

【HDU - 3870】Catch the Theves(平面图转对偶图最短路,网络流最小割)

题干&#xff1a; A group of thieves is approaching a museum in the country of zjsxzy,now they are in city A,and the museum is in city B,where keeps many broken legs of zjsxzy.Luckily,GW learned the conspiracy when he is watching stars and told it to zjsxz…

Apollo进阶课程 ⑧ | 高精地图的格式规范

目录 高精地图规范格式分类 NDS格式规范 Open DRIVE格式规范 原文链接&#xff1a;Apollo进阶课程 ⑧ | 高精地图的格式规范 上周阿波君为大家详细介绍了「Apollo进阶课程⑦高精地图的采集与生产」。 高精地图采集过程中需要用到的传感器有GPS、IMU和轮速计。 无论是哪种传感…

Apollo进阶课程 ⑨ | 业界的高精地图产品

目录 高精地图的格式规范-OpenDRIVE HERE HD LIve Map HERE HD LIVE MAP-MAP COLLECTION HERE HD Live Map-Crowdsourced Update HERE HD Live Map-Learning HERE HD Live Map-Product MobileEye MobileEye-Pillars of Autonomous Driving MobileEye-Map as back-up s…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接&#xff1a;进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具&#xff08;也可不下&#xff09;:高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…

Apollo进阶课程⑪ | Apollo地图生产技术

目录 高精地图生产流程 数据采集 数据处理 元素识别 人工验证 全自动数据融合加工 基于深度学习的地图要素识别 人工验证生产 地图成果 原文链接&#xff1a;进阶课程⑪ | Apollo地图生产技术 高精地图是自动驾驶汽车的「千里眼」和「透视镜」。 摄像头、激光雷达、传…

Jenkins初识

Jenkins是啥 官方文档 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者通过一个独立的 Java 程序。CI(Continuous integration&#xff0c;持续集成…

Apollo进阶课程 ⑫ | Apollo高精地图

目录 Apollo高精地图表征元素 Apollo车道模型 UTM坐标系 84坐标系 Track坐标系 Apollo opDRIVE规范 HDMAP引擎 高精地图在政策方面的挑战 原文链接&#xff1a;进阶课程 ⑫ | Apollo高精地图 高精地图与普通地图不同&#xff0c;高精地图主要服务于自动驾驶车辆&#…

一步步编写操作系统 6 启动bochs

运行bochs 终于安装完成了&#xff0c;虽然这过程中有可能会出现各种各样的问题&#xff0c;但还是值得庆祝的&#xff0c;对Linux不熟的朋友第一次就搞定了这么个硬货&#xff0c;我理解您此时的喜大普奔之情&#xff0c;哈哈&#xff0c;给大家点赞。顺便说一句&#xff0c;…