《深度学习进阶:自然语言处理》第一章学习(第一部分)

前言

这本书有个我非常喜欢的地方就是他非常注重原理部分,而不是去借助框架实现,这种书真的要去细细阅读而不是快速的阅读完,那没有效果,一共8章,一天一章,这期间要穿插去做项目,这里的话,我就先不要paddle框架去实现了,先用代码去实现之后再去用框架,上本书什么时候我可以在去读一下,是真的好用,然后的话,我必须注重基础呀,那么开始吧!

很喜欢的一句话:技术已经进步到了可以轻松进行复制的时代。当下是一个可以轻松复制照片、视频、源代码和库的便捷世界。但是,无论技术多么发达,生活多么便利,经验都是无法轻松复制的。自己动手的经验、花时间思考的经验,都是无法复制的。而那些永恒的价值,正存在于这些无法复制的事物中。

第一章神经网络的复习

数学和Python的复习

向量是同时拥有大小和方向的量。

在数学和深度学习等许多领域,向量一般作为列向量处理。这里是行向量。
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第1张图片
如上所示,可以使用np.array()方法生成向量或矩阵。该方法会生成NumPy的多维数组类np.ndarray。

然后对于相同形状矩阵的运算就是对应元素做运算,对于不同形状的就是要应用到广播。每个元素都与这个数计算

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第2张图片
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第3张图片

向量内积:
在这里插入图片描述

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第4张图片
向量内积和矩阵乘积都是用的dot这个函数,但是一维的话就是前者,多维是后者
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第5张图片
这里注意一个点,就是在进行矩阵运算的时候一定要注意形状

神经网络的推理

神经网络中进行的处理可以分为学习和推理两部分。本节将围绕神经网络的推理展开说明

神经网络就是函数。函数是将某些输入变换为某些输出的变换器,与此相同,神经网络也将输入变换为输出。

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第6张图片
用〇表示神经元,用箭头表示它们的连接。此时,在箭头上有权重,这个权重和对应的神经元的值分别相乘,其和(严格地讲,是经过激活函数变换后的值)作为下一个神经元的输入。另外,此时还要加上一个不受前一层的神经元影响的常数,这个常数称为偏置。因为所有相邻的神经元之间都存在由箭头表示的连接,所以图1-7的神经网络称为全连接网络。
在这里插入图片描述

之后,改变权重和偏置的值,根据神经元的个数,重复进行相应次数的式(1.2)的计算,这样就可以求出所有隐藏层神经元的值。

在这里插入图片描述
1, x2),这是一个1×2的矩阵。再者,权重是2×4的矩阵,偏置是1×4的矩阵。这样一来,式(1.3)可以如下进行简化:
在这里插入图片描述
在神经网络领域,我们会同时对多笔样本数据(称为mini-batch,小批量)进行推理和学习

这个式子很重要,因为我们每次投放数据并不会一个个放,而是每次放一个batch,从上面那个式子中可以看出神经网络结构非常的重要,因为这里面的2和4就是由网络结构得出的。
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第7张图片
全连接层的变换是线性变换。激活函数赋予它“非线性”的效果。严格地讲,使用非线性的激活函数,可以增强神经网络的表现力。这里我们主要用到的是sigmoid函数。

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第8张图片

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第9张图片

《深度学习进阶:自然语言处理》第一章学习(第一部分)_第10张图片

下面看一个例子:
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第11张图片
这里面有个细节去写形式就是输入的形式是(a,b)中的a,然后输出的形式是b。然后最后的输出是3维数据,即为对3个类别每个类的得分,就是分类:得分是计算概率之前的值。得分越高,这个神经元对应的类别的概率也越高。后面我们会看到,通过把得分输入Softmax函数,可以获得概率。这里计算的是得分,所以最后就不放入softmax函数了

在实际处理中,我们将每个层都进行类化,下面看看正向传播吧!推理就是正向传播

这里将全连接层的变换实现为Affine层,将sigmoid函数的变换实现为Sigmoid层。

​ 所有的层都有forward()方法和backward()方法

​ 所有的层都有params和grads实例变量

首先,forward()方法和backward()方法分别对应正向传播和反向传播。其次,params使用列表保存权重和偏置等参数(参数可能有多个,所以用列表保存)。grads以与params中的参数对应的形式,使用列表保存各个参数的梯度

我们先来实现sigmoid层和affine层

我这里是新建了个py文件在里面写类,然后再导入
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第12张图片
可以看见我们的类中都会有初始化的函数里面有一个参数的属性,sigmoid里面没有的,因为是在affine后进入这个层,这时输入的就是一个x,然后的affine呢就是我们说i的线性计算,有w,b然后forward的化就是计算了,两个都是!
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第13张图片
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第14张图片
首先对权重进行初始化,生成3个层。然后,将要学习的权重参数一起保存在params列表中。这里,因为各个层的实例变量params中都保存了学习参数,所以只需要将它们拼接起来即可。这样一来,TwoLayerNet的params变量中就保存了所有的学习参数。像这样,通过将参数整理到一个列表中,可以很轻松地进行参数的更新和保存。

这里面的参数是用列表拼接的方法,所以用列表很方便。

然后让我们实现一下:
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第15张图片
这里其实我是想导入的,但是会报错,找了很长时间也没有找到,后来我就用了方法,然后看一下最后的部分:
《深度学习进阶:自然语言处理》第一章学习(第一部分)_第16张图片

你可能感兴趣的:(初探人工智能,神经网络,python)