作者 : 云不见

链接 :https://blog.csdn.net/Walk_OnTheRoad/article/details/107700703

此笔记是基于《深度学习入门》这本书的重点知识汇总。

本文重点知识点:

  • 感知机/多层感知机MLP

  • NumPy多维数组的运算部分总结

  • 正向传播(正向传播算法,也叫前向传播算法)

  • 激活函数

  • 损失函数

目录:

1、感知机/多层感知机(MLP)

2、NumPy多维数组的运算

3、前向传播(forward propagation)

4、激活函数

(1)阶跃函数

(2)sigmoid(逻辑回归常用)

(3)ReLU函数(线性整流函数:最近使用的激活函数)(Rectified Linear Unit)

(4)softmax函数(一般用于多元分类问题)

5、损失函数

定义

(1)均方误差

(2)交叉熵误差

(3)mini-batch版交叉熵误差的实现

为何要设定损失函数?

1、感知机/多层感知机(MLP)

感知机是什么?

多个输入,一个输出。改变权重w可以实现与、与非和或门。(构造相同,只是权重参数不一样)

图1-1 感知机原理(用的激活函数是阶跃函数)

1.1  用感知机原理实现一个与门

1.2  用 -b 代替 θ,用NumPy实现感知机

单层感知机的缺点:

  • 不能实现异或门(因为没有这样的w和b参数存在)

  • 为什么不能实现 ?

    • 单层感知机只能表示由一条直线分割的空间,这种空间为线性空间;而异或是非线性的,空间不能由直线分割,不过可由曲线分割,这种空间为非线性空间

如何改进:叠加层。

  • 引出多层感知机(MLP)

其实异或门可由 与、与非、或门 组合而成。所以异或是多层结构的神经网络(两层)。(一层不行,咱就叠加层)(一顿火锅解决不了,咱就再来一顿!)

而且两层感知机运作过程好比流水线作业,一层层传递

总结:单层感知机(线性)通过叠加层可进行非线性的表示

  • 单层感知机——表示线性空间

  • 多层感知机——表示非线性空间,理论上还可表示计算机

多层感知机 = 神经网络

感知机与神经网络的区别:激活函数不同!

  • 单层感知机:激活函数为阶跃函数

  • 神经网络:激活函数不是阶跃函数

2、NumPy多维数组的运算

np.ndim(A) :获取数组的维数,维数由最小的行或者列来确定

A.shape :获取数组的形状(几行几列),返回元组(tuple)

A.shape[0] 代表第一个维度,即行;
A.shape[1] 代表第二个维度,即列

二维数组 = 矩阵
比如:
A = [[1,2],
[3,4],
[5,6]]

行 = 第一个维度(第0维) = A.shape[0] = 有三个元素(有三行)
列 = 第二个维度(第1维) = A.shape[1] = 有两个元素(有两列)

np.dot():矩阵乘法
接收两个NumPy数组作为参数,并返回数组的乘积。

3、前向传播(forward propagation)

前向传播的实现(即假设已经知道了参数的值,进行分类任务)
= 假设我们已经学习到了参数,进行推理任务,也就是对输入数据进行分类,这就是前向传播的过程。
即 前向传播 = 此处的推理处理

三层前向传播的神经网络的实现

4、激活函数

《深度学习入门》:一般而言,回归问题用恒等函数,分类问题用softmax函数。

感知机就是用的阶跃函数去激活的,那么用其他激活函数的就是神经网络了!

(1)阶跃函数

4.1.1  Python实现阶跃函数

4.1.2  用NumPy实现阶跃函数(输入为正,输出1;输入为负,输出0)

4.1.3  画出阶跃函数

(2)sigmoid(逻辑回归常用)

4.2.1  sigmoid函数的实现

4.2.2  画出sigmoid函数

sigmoid函数的平滑性对神经网络的学习具有重要意义。

(3)ReLU函数(线性整流函数:最近使用的激活函数)(Rectified Linear Unit)

4.3.1  ReLU函数的实现

4.3.2  画出ReLU函数

输出层使用的激活函数选择要根据求解问题的性质决定。
回归问题:用恒等函数,直接输出
分类问题:
二元分类问题:用sigmoid函数
多元分类问题:用softmax函数(下次讨论)

(4)softmax函数(一般用于多元分类问题)

softmax函数实现

softmax激活函数实现,一般用于多元分类

遇到指数函数要当心

防止溢出,加个或减去个C,结果不变

softmax激活函数改善,防止溢出,加个或减去个C

softmax函数的输出值的总和是1,所以可以把softmax函数的输出解释为“概率”。

axis = 1 行方向
axis = 0 列方向
注意:矩阵的第0维是列方向,第1维是行方向。——译者注

比如:
参数 axis=1。这指定了在100 × 10的数组中,沿着第1维方向(以第1维为轴)找到值最大的元素的索引(第0维对应第1个维度)

5、损失函数

定义

  • 损失函数是表示神经网络性能的“有多坏(恶劣程度)”的指标,即当前的神经网络对监督数据(训练数据)在多大程度上不拟合,在多大程度上不一致。恶劣程度越小,越好。

  • 神经网络以某个指标作为线索寻找最优权重参数,这个指标就是 损失函数(loss function)

  • 损失函数一般用均方误差和交叉熵误差等。

  • 当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。

(1)均方误差

python实现均方误差

(2)交叉熵误差

python实现交叉熵误差

(3)mini-batch版交叉熵误差的实现

  • 用随机选择的小批量数据(mini-batch)作为全体训练数据的近似值。(就像抽样、采样进行人口普查一样)

  • 当监督数据 t 是标签形式(非one-hot表示,而是像“2”“7”这样的标签)时,交叉熵误差可通过如下代码实现

为何要设定损失函数?

  • 我们的目标是获得使识别精度尽可能高的神经网络,那可以用识别精度作为指标吗?

    • 为了找到使损失函数的值尽可能小的地方,需要计算参数的导数(梯度),以这个导数为指引,逐步更新参数的值。

    • 如果导数的值为负,通过使该权重参数向正方向改变,减小损失函数的值;

    • 如果导数的值为正,则通过使该权重参数向负方向改变,减小损失函数的值。

    • 当导数的值为0时,无论权重参数向哪个方向变化,损失函数的值都不会改变,此时该权重参数的更新会停在此处。

    • 那么如果以识别精度为指标,则参数的导数在绝大多数地方都会变为0。则无法更新参数。

    • 综上,需要设定损失函数来描述神经网络的好坏。

欢迎关注【深度学习冲鸭】公众号,我会在这里记录自己在路上的一点一滴!

再小的人也有自己的品牌!期待和你一起进步!

立一个小小flag????2020年坚持20:20发文,大家准时来监督吧!!

豆瓣9.4!《深度学习入门》笔记总结,带你从感知机入门深度学习!(连载)...相关推荐

  1. 深度学习入门笔记系列 ( 二 )——基于 tensorflow 的一些深度学习基础知识

    本系列将分为 8 篇 .今天是第二篇 .主要讲讲 TensorFlow 框架的特点和此系列笔记中涉及到的入门概念 . 1.Tensor .Flow .Session .Graphs TensorFlo ...

  2. 《动手实现深度学习》笔记(三)多层感知机

    四. 多层感知机 4.1 简介及实现 4.1.1 简介   1. [线性模型可能出错] 仿射变换中的线性是一个很强的假设,但实际上线性模型是可能会出错的,线性意味着单调,任何特征的增大都会导致模型输出 ...

  3. onenote 入门笔记_Windows 10中的OneNote入门指南

    onenote 入门笔记 Microsoft has revamped many of its internal apps to match both the design aesthetic and ...

  4. HTML入门笔记(带源文件)

    如需源文件,文章下方百度网盘自取 一.HTML简介 1.HTML是什么? HTML:hyper text markup language超文本标记(标签)语言 由各种标签组成,用来制作网页,告诉浏览器 ...

  5. JavaScript入门笔记(带源文件)

    如需原文件,文章下方百度网盘链接自取 JavaScript课程笔记 一.JavaScript简介 1. 什么是JavaScript? JavaScript简称JS,由网景公司开发的客户端脚本语言,不需 ...

  6. 软件测试需要学习什么 3分钟带你了解软测的学习内容

    随着用户对软件的体验不断提高,大家对软件质量的要求也越来越高,而软件测试因为肩负着控制和监督软件质量的重任,使得越来越多的人从中看到了发展前景,想学习软件测试,但由于我国目前还未有高校开设相关的测试专 ...

  7. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  8. 深度学习入门笔记(五):神经网络的学习

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  9. 深度学习入门笔记(四):神经网络

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  10. 深度学习入门笔记(十六):计算机视觉之边缘检测

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. 研究生应锻炼的24种能力
  2. springboot创建多个对象
  3. Nginx的rewrite之if指令(一)
  4. Android\OPhone动画分析之翻转效果
  5. 正确退出activity_如何退出Activity
  6. 等保2.0丨2021 必须了解的40个问题
  7. 苹果 macOS 再曝漏洞,输任意密码可进入 App Store 首选项
  8. java socket 异常处理_socket编程报异常java.io.EOFException
  9. windows系统bat批处理 执行后 隐藏批处理本身
  10. FireReport 层次坐标 使用问题A1[A1:-1]=A1
  11. 从零开始搭建一个群管机器人
  12. r语言 rgl 强制过程中_R语言正则表达式:提取括号中的内容
  13. 如何接入易班第三方登录
  14. OEL8上VNC无法访问图形界面的解决方法
  15. 中国计算机学会推荐国际学术会议和期刊目录 2015
  16. app性能测试怎么做
  17. 编程论坛手机客户端 ~太强悍了
  18. antd-Calendar(日历)自动嵌入对应时间问题
  19. 网站漏洞挖掘测试服务
  20. Windows_Media_Player WMP V11 软件打开正在播放

热门文章

  1. git针对Android Studio的使用
  2. ReflectionZ_测试_01
  3. TYVJ 4354 多重背包二进制优化
  4. “带锁的门”问题,并有c语言和python代码运行效率对比
  5. java day30【数据库连接池 、Spring JDBC : JDBC Template】
  6. 趣图图解 SOLID 软件开发原则
  7. Android 拦截TextView中超链接点击事件
  8. Hibernate---简介
  9. 使用元组交换两个数据
  10. Swift 3必看:新的访问控制fileprivate和open