深度学习鱼书笔记

本书从Python基础开始,逐步讲解深度学习的核心概念。首先介绍了朴素感知机,包括感知机的工作原理、实现和局限性,然后过渡到神经网络,探讨了激活函数如阶跃函数、sigmoid函数和ReLU函数,并通过Python实现了一个3层神经网络,强调了非线性激活函数在神经网络中的重要性。最后讨论了输出层的设计,区分了分类问题和回归问题中输出层的差异。
摘要由CSDN通过智能技术生成

What I cannot create, I do not understand.—— Richard Phillips Feynman
本书不使用任何现有的深度学习框架,尽可能仅使用最基本的数学知识和Python 库,从零讲解深度学习核心问题的数学原理,从零创建一个经典的深度学习网络。

1-python基础

python基础
numpy库的使用
matplotlib库的使用

2-朴素感知机(人工神经元)

感知机是深度学习的起源算法,学习感知机的构造就是学习深度学习的一种重要思想。这一章讲述的是单层的感知机。

2-1 感知机是什么

感知机接收多个输入信号,输出一个信号。
输入
权重
输出
阈值
输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和当输出超过阈值时,才会输出信号。这也称为“神经元被激活”。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xkdMcXq-1582985168073)(en-resource://database/1101:1)]
感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就越高。

2-2 简单的逻辑电路

与门、与非门、或门的感知机构造是一样的。实际上,3 个门电路只有参数的值(权重和阈值)不同。也就是说,相同构造的感知机,只需通过适当地调整参数的值,就可以像“变色龙演员”表演不同的角色一样,变身为与门、与非门、或门。

2-3 感知机的实现

简单的代码实现
导入权重和偏置
**权重:**不同信号对神经元的影响程度,用于控制各个信号的重要程度。
**偏置:**偏置是调整神经元被激活的容易程度(输出信号为1 的程度)的参数。
偏置的值决定了神经元被激活的容易程度。
使用权重和偏置的实现

2-4 感知机的局限性

感知机可以实现与门、与非门、或门三种逻辑电路。当时感知机不能实现异或门(XOR gete)
异或门又被称作逻辑异或电路
线性和非线性:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnZtlwxB-1582985168075)(en-resource://database/1103:1)]

2-5 多层感知机

单层感知机不能实现异或门,但是我们可以多层感知机来实现异或门。因此下一章我们将学到神经网络。

3-神经网络

前面提到的感知机是朴素感知机,神经网络是多层感知机。
朴素感知机: 单层网络,指的是激活函数使用了阶跃函数的模型。(阶跃函数是指一旦输入超过阈值,就切换输出的函数。)
多层感知机: 是指神经网络,即使用sigmoid函数(后述)等平滑的激活函数的多层网络。
实际上,上一章介绍的感知机和接下来要介绍的神经网络的主要区别就在于这个激活函数。其他方面,比如神经元的多层连接的构造、信号的传递方法等,基本上和感知机是一样的。

3-1 激活函数

激活函数: 将输入信号的总和转换为输出信号。先计算输入信号的加权总和,然后用激活函数转换这一总和。激活函数是连接感知机和神经网络的桥梁。

a = b + w1x1 + w2x2
y = h(a)
其中 函数h就是激活函数
计算加权输入信号和偏置的总和,记为a。然后用h()函数将a转换为输出y。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifGtuU3B-1582985168077)(en-resource://database/1105:1)]
表示神经元的○中明确显示了激活函数的计算过程,即信号的加权总和为节点a,然后节点a被激活函数h() 转换成节点y。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jKMDkHZI-1582985168081)(en-resource://database/1107:1)]

3-2 阶跃函数和sigmoid函数以及Relu函数

阶跃函数: 表示的激活函数以阈值为界,一旦输入超过阈值,就切换输出。
在激活函数的众多候选函数中,感知机使用了阶跃函数。如果感知机使用其他函数作为激活函数的话会怎么样呢?实际上,如果将激活函数从阶跃函数换成其他函数,就可以进入神经网络的世界了。下面我们就来介绍一下神经网络使用的激活函数。

3-2-1 sigmoid函数

在这里插入图片描述

h(x)=1/(1+e^{-x})

e是纳皮尔常数2.7182 . . .

sigmoid函数的实现:

def sigmoid(x):
return 1 / (1 + np.exp(-x))

3-2-2 阶跃函数

在这里插入图片描述

阶跃函数的实现

def step_funcction(x):
    if x>0:
        return 1
    else:
        return 0
#该阶跃函数存在缺陷

上面这阶跃函数的缺陷在于只能接受浮点数作为参数,而不支持Numpy的矩阵作为参数输入。因此我们要更改一下阶跃函数,利用Numpy中的 astype方法转换数组的数据类型。

def step_function(x):
    y = x > 0
    return y.astype(np.int)

我们利用下面这段代码来详细理解我们新设定的阶跃函数

x = np.array([-1.0, 1.0, 2.0])
y = x > 0
#array([False, True, True], dtype=bool)
y = y.astype(np.int) 
#array([0, 1, 1])
#由此看到从矩阵变成了布尔类型再到整形的转换

阶跃函数的图像

3-2-3 sigmoid函数和阶跃函数的比较

在这里插入图片描述
不同点1:“平滑性”的不同。sigmoid 函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0 为界,输出发生急剧性的变化。sigmoid 函数的平滑性对神经网络的学习具有重要意义。

不同点2:相对于阶跃函数只能返回0 或1,sigmoid 函数可以返回0.731 . . .、0.880 . . . 等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0 或1 的二元信号,而神经网络中流动的是连续
的实数值信号。

阶跃函数和sigmoid 函数的共同性质

阶跃函数和sigmoid函数虽然在平滑性上有差异,但是如果从宏观视角看它们具有相似的形状。

实际上,两者的结构均是“输入值较小时,输出接近0(为0);随着输入增大,输出向1 靠近(变成1)”。

也就是说,当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。还有一个共同点是,不管输入信号有多小,或者有多大,输出信号的值都在0 到1 之间。

3-2-4 非线性函数

阶跃函数和sigmoid 函数还有其他共同点,就是两者均为非线性函数。sigmoid 函数是一条曲线,阶跃函数是一条像阶梯一样的折线,两者都属于非线性的函数。

在介绍激活函数时,经常会看到“非线性函数”和“线性函数”等术语。函数本来是输入某个值后会返回一个值的转换器。向这个转换器输入某个值后,输出值是输入值的常数倍的函数称为线性函数(用数学式表示为h(x) = cx。c 为常数)。因此,线性函数是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。

神经网络的激活函数必须使用非线性函数。换句话说,激活函数不能使用线性函数。为什么不能使用线性函数呢?因为使用线性函数的话,加深神经网络的层数就没有意义了。

Why?为什么神经网络的激活函数不能是线性函数?

线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。为了具体地(稍微直观地)理解这一点,我们来思考下面这个简单的例子。这里我们考虑把线性函数h(x) = cx 作为激活函数,把y(x) = h(h(h(x))) 的运算对应3 层神经网络A。这个运算会进行y(x) = c × c × c × x 的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c 3)这一次乘法运算(即没有隐藏层的神经网络)来表示。如本例所示,使用线性函数时,无法发挥多层网络带来的优势。因此,为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

3-2-5 Relu函数

在阶跃函数和sigmoid 函数的基础上,我们引入一个新的激活函数Relu函数。

ReLU函数在输入大于0 时,直接输出该值;在输入小于等于0 时,输出0。
在这里插入图片描述

Relu函数的实现:

def relu(x):
return np.maximum(0, x)

在这里插入图片描述

这里使用了NumPy的maximum函数。maximum函数会从输入的数值中选择较大的那个值进行输出。

3-3 多维数组的使用

3-3-1 多维数组

数组的维数可以由np.dim()计算得到;数组的形状可以通过实例变量shape获得。

Eg:

>>> import numpy as np
>>> A = np.array([1, 2, 3, 4])
>>> print(A)
[1 2 3 4]
>>> np.ndim(A)
1
>>> A.shape
(4,)
>>> A.shape[0]
4

这里的A.shape的结果是个元组(tuple),因此结果是(4, )。如果A是二维数组时返回的是元组(4,3),三维数组时返回的是元组(4,3,2)。

3-3-2 矩阵乘法

用点乘运算,np.dot() 直接上代码

>>> A = np.array([[1,2], [3,4]])
>>> A.shape
(2, 2)
>>> B = np.array([[5,6], [7,8]])
>>> B.shape
(2, 2)
>>> np.dot(A, B)
array([[19, 
### 回答1: 深度学习是人工智能领域中的一种方法。深度学习使用人工神经网络进行信息处理,可以自动从复杂数据中提取特征,并从大规模数据中进行学习,进而进行预测和决策。深度学习在图像识别、语音识别、自然语言处理等领域有广泛应用。 《深度学习入门 鱼书 pdf》是一本介绍深度学习的入门级教材,由日本著名深度学习专家斋藤康毅写作。这本书系统地介绍了深度学习的基础知识、常用神经网络模型和训练方法,并提供了许多实例程序,方便读者进行练习和实践。 本书内容丰富、易于理解,适合初学者学习。通过阅读本书,读者可以了解深度学习的基本原理,了解常用神经网络模型的特点和应用场景,并能够掌握一些常用的训练方法和技巧。 总之,《深度学习入门 鱼书 pdf》是一本非常好的入门读物,对于准备学习深度学习的读者来说,是一本难得的好书。读者可以通过阅读本书,掌握深度学习的基础知识,从而进一步深入学习和应用这些技术。 ### 回答2: 《深度学习入门 鱼书 pdf》是一本介绍深度学习相关知识的书籍。该书以Python编程语言和NumPy库作为基础,通过对理论知识的深入探讨和具体实践的案例分析,帮助读者深入了解深度学习的原理和应用方法。 在书中,作者深入讲解了人工神经网络深度学习的相关概念,包括前馈神经网络、卷积神经网络、循环神经网络等。同时,他也介绍了常用的激活函数、损失函数和优化算法,并详细阐述了模型的正则化、数据增强、迁移学习等技术。 为了帮助读者掌握深度学习的自主设计能力,该书还提供了大量典型案例,如手写数字识别、图像分类、文本情感分析等。读者可以通过这些案例的学习和实践,对深度学习进行更加深入的理解。 总的来说,这本《深度学习入门 鱼书 pdf》是一本很好的入门书籍,适合对深度学习感兴趣的读者阅读。同时,由于该书的Python代码实现很详细,也适合已经有一定编程基础的人进行深度学习的学习和实践。 ### 回答3: 《深度学习入门 鱼书 pdf》是一本非常优秀的深度学习入门教材,该书作者是日本著名AI专家斋藤康毅。该书在深度学习方面覆盖的知识点比较广泛,不仅包含了神经网络的基础知识,还介绍了各种常用的深度学习算法以及实践中的一些技巧。本书内容简洁易懂,适合初学者阅读,具有很高的实用性和指导性。 《深度学习入门 鱼书 pdf》主要包括了以下几个方面的内容: 1. 深度学习的基础知识,包括了神经网络的结构和训练方法等; 2. 常用的深度学习算法,例如卷积神经网络、循环神经网络等; 3. 实践中应用的技巧,例如超参数的调节、批量归一化等; 4. 最新的深度学习进展和应用,例如深度增强学习、深度生成模型等。 总之,《深度学习入门 鱼书 pdf》是一本非常实用的深度学习入门教材,无论是想深入学习深度学习的初学者还是从事相关领域的研究人员都可以从中获益匪浅。同时,掌握深度学习知识也有助于我们对人工智能的认识和理解,对相关行业的发展也具有重要的促进作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值