01.神经网络和深度学习 W3.浅层神经网络

文章目录

    • 1. 神经网络概览
    • 2. 神经网络的表示
    • 3. 神经网络的输出
    • 4. 多样本向量化
    • 5. 激活函数
    • 6. 为什么需要 非线性激活函数
    • 7. 激活函数的导数
    • 8. 随机初始化
    • 作业

参考:
吴恩达视频课
深度学习笔记

1. 神经网络概览

在这里插入图片描述
xW[1]b[1]}⟹z[1]=W[1]x+b[1]⟹a[1]=σ(z[1])\left.\begin{array}{c}x \\ W^{[1]} \\ b^{[1]}\end{array}\right\} \Longrightarrow z^{[1]}=W^{[1]} x+b^{[1]} \Longrightarrow a^{[1]}=\sigma\left(z^{[1]}\right)xW[1]b[1]z[1]=W[1]x+b[1]a[1]=σ(z[1])

第一层根据输入计算 z[1]z^{[1]}z[1],然后计算第一层的输出 a[1]a^{[1]}a[1]

a[1]=σ(z[1])W[2]b[2]}⟹z[2]=W[2]a[1]+b[2]⟹a[2]=σ(z[2])⟹L(a[2],y)\left.\begin{array}{r}a^{[1]}=\sigma\left(z^{[1]}\right) \\ W^{[2]} \\ b^{[2]}\end{array}\right\} \Longrightarrow z^{[2]}=W^{[2]} a^{[1]}+b^{[2]} \Longrightarrow a^{[2]}=\sigma\left(z^{[2]}\right)\\ \Longrightarrow L(a^{[2]}, y)a[1]=σ(z[1])W[2]b[2]z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])L(a[2],y)

把第一层的输出 a[1]a^{[1]}a[1] 作为第二层的输入,计算 z[2]z^{[2]}z[2],代入 sigmoid 函数,得到输出 a[2]a^{[2]}a[2],进而计算损失函数

da[1]=dσ(z[1])dW[2]db[2]}⟸dz[2]=d(W[2]a[1]+b[2])⟸da[2]=dσ(z[2])⟸dL(a[2],y)\left.\begin{array}{rl}d a^{[1]}=d \sigma\left(z^{[1]}\right) & \\ d W^{[2]} \\ d b^{[2]}\end{array}\right\} \Longleftarrow d z^{[2]}=d\left(W^{[2]} a^{[1]}+b^{[2]}\right) \Longleftarrow d a^{[2]}=d \sigma\left(z^{[2]}\right)\\ \Longleftarrow dL(a^{[2]}, y)da[1]=dσ(z[1])dW[2]db[2]dz[2]=d(W[2]a[1]+b[2])da[2]=dσ(z[2])dL(a[2],y)

还有反向的求导过程

2. 神经网络的表示

在这里插入图片描述

3. 神经网络的输出

在这里插入图片描述
每个神经网络单元的工作包括两部分:计算 zzz,然后根据激活函数(sigmoid)计算 σ(z)\sigma(z)σ(z)

z1[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[1])z2[1]=w2[1]Tx+b2[1],a2[1]=σ(z2[1])z3[1]=w3[1]Tx+b3[1],a3[1]=σ(z3[1])z4[1]=w4[1]Tx+b4[1],a4[1]=σ(z4[1])\begin{aligned} z_{1}^{[1]} &=w_{1}^{[1] T} x+b_{1}^{[1]}, \quad a_{1}^{[1]}=\sigma\left(z_{1}^{[1]}\right) \\ z_{2}^{[1]} &=w_{2}^{[1] T} x+b_{2}^{[1]}, \quad a_{2}^{[1]}=\sigma\left(z_{2}^{[1]}\right) \\ z_{3}^{[1]} &=w_{3}^{[1] T} x+b_{3}^{[1]}, \quad a_{3}^{[1]}=\sigma\left(z_{3}^{[1]}\right) \\ z_{4}^{[1]} &=w_{4}^{[1] T} x+b_{4}^{[1]}, \quad a_{4}^{[1]}=\sigma\left(z_{4}^{[1]}\right) \end{aligned}z1[1]z2[1]z3[1]z4[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[1])=w2[1]Tx+b2[1],a2[1]=σ(z2[1])=w3[1]Tx+b3[1],a3[1]=σ(z3[1])=w4[1]Tx+b4[1],a4[1]=σ(z4[1])

[layer] 上标表示第几层,下标表示该层的第几个节点

在这里插入图片描述
a[1]=[a1[1]a2[1]a3[1]a4[1]]=σ(z[1])a^{[1]}=\left[\begin{array}{c}a_{1}^{[1]} \\ a_{2}^{[1]} \\ a_{3}^{[1]} \\ a_{4}^{[1]}\end{array}\right]=\sigma\left(z^{[1]}\right)a[1]=a1[1]a2[1]a3[1]a4[1]=σ(z[1])
在这里插入图片描述

  • 输入一个样本的特征向量,四行代码计算出一个简单神经网络的输出,那么多个样本呢?往下看

4. 多样本向量化

对于 m 个样本,(i)表示第i个样本

z[1](i)=W[1](i)x(i)+b[1](i)a[1](i)=σ(z[1](i))z[2](i)=W[2](i)a[1](i)+b[2](i)a[2](i)=σ(z[2](i))\begin{aligned} z^{[1](i)} &=W^{[1](i)} x^{(i)}+b^{[1](i)} \\ a^{[1](i)} &=\sigma\left(z^{[1](i)}\right) \\ z^{[2](i)} &=W^{[2](i)} a^{[1](i)}+b^{[2](i)} \\ a^{[2](i)} &=\sigma\left(z^{[2](i)}\right) \end{aligned}z[1](i)a[1](i)z[2](i)a[2](i)=W[1](i)x(i)+b[1](i)=σ(z[1](i))=W[2](i)a[1](i)+b[2](i)=σ(z[2](i))

  • 为了向量化计算,进行堆叠
    x=[⋮⋮⋮⋮x(1)x(2)⋯x(m)⋮⋮⋮⋮]x=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]x=x(1)x(2)x(m)

Z[1]=[⋮⋮⋮⋮z[1](1)z[1](2)⋯z[1](m)⋮⋮⋮⋮]Z^{[1]}=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ z^{[1](1)} & z^{[1](2)} & \cdots & z^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]Z[1]=z[1](1)z[1](2)z[1](m)

A[1]=[⋮⋮⋮⋮α[1](1)α[1](2)⋯α[1](m)⋮⋮⋮⋮]A^{[1]}=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ \alpha^{[1](1)} & \alpha^{[1](2)} & \cdots & \alpha^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]A[1]=α[1](1)α[1](2)α[1](m)

z[1](i)=W[1](i)x(i)+b[1]α[1](i)=σ(z[1](i))z[2](i)=W[2](i)α[1](i)+b[2]α[2](i)=σ(z[2](i))}⟹{A[1]=σ(z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(z[2])\left.\begin{array}{c}z^{[1](i)}=W^{[1](i)} x^{(i)}+b^{[1]} \\ \alpha^{[1](i)}=\sigma\left(z^{[1](i)}\right) \\ z^{[2](i)=W^{[2](i)} \alpha^{[1](i)}+b^{[2]}} \\ \alpha^{[2](i)}=\sigma\left(z^{[2](i)}\right)\end{array}\right\} \Longrightarrow \left\{ \begin{array}{c} A^{[1]}=\sigma\left(z^{[1]}\right) \\ z^{[2]}=W^{[2]} A^{[1]}+b^{[2]} \\ A^{[2]}=\sigma\left(z^{[2]}\right)\end{array}\right.z[1](i)=W[1](i)x(i)+b[1]α[1](i)=σ(z[1](i))z[2](i)=W[2](i)α[1](i)+b[2]α[2](i)=σ(z[2](i))A[1]=σ(z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(z[2])

列向看,对应于不同的特征,就是神经网络中的该层的各个节点
行向看,对应于不同的训练样本

5. 激活函数

在这里插入图片描述

  • tanh激活函数是 sigmoid的平移伸缩结果,其效果在所有场合都优于sigmoidtanh几乎适合所有场合
  • 例外是,二分类问题的输出层,想让结果介于 0,1之间,所以使用 sigmoid 激活函数

tanhsigmoid两者的缺点:

  • 在特别大或者特别小 zzz 的情况下,导数的梯度 或者 函数的斜率变得特别小,最后就会接近于0,导致降低梯度下降的速度

  • 修正线性单元的函数(ReLu

激活函数的选择经验

  • 如果输出是0、1值(二分类问题),输出层 选择sigmoid函数,其它所有单元都选择Relu函数

  • 隐藏层通常会使用Relu激活函数。有时,也会使用tanh激活函数,但Relu的一个缺点是:当是负值的时候,导数等于0

  • 另一个版本的Relu被称为Leaky Relu,当是负值时,这个函数的值不等于0,而是轻微的倾斜,这个函数通常比Relu激活函数效果要好,尽管在实际中Leaky ReLu使用的并不多

ReLuLeaky ReLu的优点:

  • sigmoid函数需要进行浮点四则运算,在实践中,使用ReLu激活函数学习的更快

  • sigmoidtanh函数的导数在正负饱和区的梯度接近于0,这会造成梯度弥散,而ReluLeaky ReLu函数大于0部分都为常数,不会产生梯度弥散现象。(Relu进入负半区的时候,梯度为0,神经元此时不会训练,产生所谓的稀疏性,而Leaky ReLu不会有这问题)

  • 虽然ReLu的梯度一半都是0,但是,有足够的隐藏层使得 zzz 值大于0,所以对大多数的训练数据来说学习过程仍然可以很快

6. 为什么需要 非线性激活函数

线性隐藏层一点用也没有,因为线性函数的组合本身就是线性函数,所以除非你引入非线性,否则你无法计算出更有趣的函数,即使网络层数再多也不行

  • 不能在隐藏层用线性激活函数,可以用ReLUtanhleaky ReLU或者其他的非线性激活函数
  • 唯一可以用 线性激活函数的通常就是输出层;在隐藏层使用 线性激活函数非常少见

7. 激活函数的导数

  • sigmoid
    在这里插入图片描述
    a=g(z);g′(z)=ddzg(z)=a(1−a)a=g(z) ;\quad g^{\prime}(z)=\frac{d}{d z} g(z)=a(1-a)a=g(z);g(z)=dzdg(z)=a(1a)
  • tanh
    在这里插入图片描述

a=g(z);g′(z)=ddzg(z)=1−a2a=g(z) ; \quad g^{\prime}(z)=\frac{d}{d z} g(z)=1-a^2a=g(z);g(z)=dzdg(z)=1a2

  • ReLu Rectified Linear Unit
    在这里插入图片描述
    g′(z)={0if z<01if z>0undefinedif z=0g^{\prime}(z)=\left\{\begin{array}{ll}0 & \text { if } z<0 \\ 1 & \text { if } z>0 \\ u n d e f i n e d & \text { if } z=0\end{array}\right.g(z)=01undefined if z<0 if z>0 if z=0
    z=0z=0z=0 时,可以让导数为 0,或者 1

  • Leaky ReLU Leaky linear unit
    在这里插入图片描述
    g′(z)={0.01if z<01if z>0undefinedif z=0g^{\prime}(z)=\left\{\begin{array}{ll}0.01 & \text { if } z<0 \\ 1 & \text { if } z>0 \\ u n d e f i n e d & \text { if } z=0\end{array}\right.g(z)=0.011undefined if z<0 if z>0 if z=0
    z=0z=0z=0 时,可以让导数为 0.01,或者 1

8. 随机初始化

对于一个神经网络,如果你把权重或者参数都初始化为0,那么梯度下降将不会起作用。

在这里插入图片描述

W[1]=np.random.randn(2,2)∗0.01,b[1]=np.zeros⁡((2,1))W[2]=np.random.randn(2,2)∗0.01,b[2]=0\begin{aligned} W^{[1]} &=n p . \text {random.randn}(2,2) * 0.01, \quad b^{[1]}=n p . z \operatorname{eros}((2,1)) \\ W^{[2]} &=n p . \text {random.randn}(2,2) * 0.01, \quad b^{[2]}=0 \end{aligned}W[1]W[2]=np.random.randn(2,2)0.01,b[1]=np.zeros((2,1))=np.random.randn(2,2)0.01,b[2]=0
常数为什么是0.01,而不是100或者1000,sigmoid/tanh 激活函数在很平坦的地方,学习非常慢

当你训练一个非常非常的神经网络,你可能要试试0.01以外的常数

作业

01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

01.神经网络和深度学习 W2.神经网络基础(作业:逻辑回归 图片识别)

文章目录编程题 11. numpy 基本函数1.1 编写 sigmoid 函数1.2 编写 sigmoid 函数的导数1.3 reshape操作1.4 标准化1.5 广播机制2. 向量化2.1 L1\L2损失函数编程题 2. 图片&#x1f431;识别1. 导入包2. 数据预览3. 算法的一般结构4. 建立算法4.1 辅助函数4.2 初始化参数4.3 前向…

PL/SQL程序设计以及安全管理实验遇到的问题及解决

问题一&#xff1a;当我书写PL/SQL语句调用所创建的函数时&#xff0c;报“此范围不存在名为XXX函数名”的错误。 解决&#xff1a; 我通过查阅相关资料&#xff0c;了解到&#xff1a;这种情况主要是调用的函数的参数或者函数名书写错误&#xff0c; 然而&#xff0c;我经过仔…

PowerDesigner使用教程 —— 概念数据模型 (转)

一、概念数据模型概述 概念数据模型也称信息模型&#xff0c;它以实体&#xff0d;联系(Entity-RelationShip,简称E-R)理论为基础&#xff0c;并对这一理论进行了扩充。它从用户的观点出发对信息进行建模&#xff0c;主要用于数据库的概念级设计。 通常人们先将现实世界抽…

阿里云 超级码力在线编程大赛初赛 第1场(第245名)

文章目录1. 比赛结果2. 题目1. 树木规划2. 正三角形拼接3. 大楼间穿梭4. 对称前后缀1. 比赛结果 通过了 3 题&#xff0c;第245名&#xff0c;进入复赛了&#xff0c;收获 T恤 一件&#xff0c;哈哈。 2. 题目 1. 树木规划 题目链接 描述 在一条直的马路上&#xff0c;…

01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)

文章目录1. 导入包2. 预览数据3. 逻辑回归4. 神经网络4.1 定义神经网络结构4.2 初始化模型参数4.3 循环4.3.1 前向传播4.3.2 计算损失4.3.3 后向传播4.3.4 梯度下降4.4 组建Model4.5 预测4.6 调节隐藏层单元个数4.7 更改激活函数4.8 更改学习率4.9 其他数据集下的表现选择题测试…

[编程启蒙游戏] 2. 奇偶数

文章目录1. 游戏前提2. 游戏目的3. python代码1. 游戏前提 孩子知道奇偶数是什么&#xff0c;不知道也没关系 还可以采用掰手指演示&#xff0c;伸出两个手指能配对&#xff0c;所有伸出来的手指都两两配对了&#xff0c;伸出来的手指个数就是偶数如果还有1个没有找到朋友的手…

过压保护(1)

征一个简单、可靠的电源过压保护电路 http://www.amobbs.com/thread-5542005-1-1.html 防过压&#xff1a;过压之后TVS导通&#xff0c;电流由正极流经自恢复保险再流经TVS到负极&#xff0c;自恢复保险升温&#xff0c;阻值变大&#xff0c;相当于断开&#xff0c;等电流撤去&…

spring boot+thmyleaf ModelAndView页面传值

如上图所示&#xff0c;当我们从后台通过ModelAndView进行传值的时候&#xff0c; 一定要注意&#xff0c;千万不要向上图那样开头加上反斜杠&#xff0c;开头加反斜杠&#xff0c;系统会默认为相对路径&#xff0c; 虽然也能找到相应的视图&#xff08;html&#xff09;&#…

LeetCode 214. 最短回文串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。 找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: "aacecaaa" 输出: "aaacecaaa"示例 2: 输入: "abcd" 输出: "…

转:c#委托事件实现窗体传值通信

C#实现Winform窗口间数据交互的三种方法介绍 2010-03-15 来自&#xff1a;CNBLOG 字体大小&#xff1a;【大 中 小】摘要&#xff1a;本文分别介绍C#实现Winform窗口间数据交互的三种方法&#xff1a;修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法&#xff0c…

LeetCode 1566. 重复至少 K 次且长度为 M 的模式

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr&#xff0c;请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组&#xff08;连续的子序列&#xff09;&#xff0c;连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 …

R语言的安装与配置

一、什么是 R 语言 R 编程语言被广泛应用在统计科学和商业领域。 在各种编程语言排名中 R 语言的排名都很靠前。 它是一款集成了数据操作、统计&#xff0c;以及可视化功能的优秀开源软件。免费&#xff0c;开源是 R 重要的特点。 二、什么是 RStudio RStudio 是用亍 R 编程的…

R语言第一讲

一、R语言入门推荐 推荐四本材料书&#xff1a;R CookBook &#xff1a;hhtp&#xff1a;//www.cookbook-r.com/R in Action http://www.amazon.com/R-Action-Robert-Kabaccoff/dp/1935182390Ggplot2:Elegant Graphics for Data Analysis(User R):hhtp://www.amazon.com/ggplo…

LeetCode 1567. 乘积为正数的最长子数组长度

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 示例 1&#xff1a; 输入&#xff1a;nums [1,-2,-…

LeetCode 1568. 使陆地分离的最少天数(DFS)

文章目录1. 题目2. 解题1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid &#xff0c;其中 0 表示水&#xff0c;而 1 表示陆地。 岛屿由水平方向或竖直方向上相邻的 1 &#xff08;陆地&#xff09;连接形成。 如果 恰好只有一座岛屿 &#xff0c;则认为陆地是 连通的 &…

LeetCode 1569. 将子数组重新排序得到同一个二叉查找树的方案数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 表示 1 到 n 的一个排列。 我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉查找树&#xff08;BST&#xff09;。 请你统计将 nums 重新排序后&#xff0c;统计满足如下条件的方案数&#xff1a;重排后得到的二叉查…

ADS1.2开发环境创建与简要介绍

ADS1.2下建立工程 1.运行ADS1.2集成开发环境&#xff08;CodeWarrior for ARM Developer Suite&#xff09;&#xff0c;点击File|New,在New对话框中&#xff0c;选择Project栏&#xff0c;其中共有7项&#xff0c;ARM Executable Image是ARM的通用模板。选中它即可生成ARM的执…

阿里云 超级码力在线编程大赛初赛 第2场 题目1. 三角魔法

文章目录1. 题目2. 解题1. 题目 题目来源&#xff1a;https://tianchi.aliyun.com/oj/15165469968503404/76745683722506851 2. 解题 采用直线的一般式进行判定 首先要能组成三角形然后是我的位置和第3点在另外两点形成的直线同侧 class Solution { public:/*** param tria…

阿里云 超级码力在线编程大赛初赛 第2场 题目3. 五字回文

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/15165469968503404/76745683722506852 2. 解题 注意 a,b,c互不相同 class Solution { public:/*** param s: The given string* return: return the number of Five-character palindrome*/in…