人工智能学习02——入门
时间:2023-12-04 00:37:02
1、一元一次函数感知器
·预测函数模型-用一元一次线性函数模拟神经元的轴突和树突
·前向传播-将统计观测到的数据发送到预测函数进行预测
罗森布拉特传感器
调整w
人类提供w的初始值,机器修正w
alpha 防止学习率大幅波动
2.方差成本函数
·选择平方/平方误差作为误差的评价方法
误差e与w成本函数是标准的一元二次函数,成为成本函数。
3.梯度下降和反向传播
调整w的斜率是否大于或等于0。
随机梯度下降:单个样本形成的成本函数
加B后,成本函数:
- 选择平方/平方误差作为误差的评估方法,该误差与预测函数中的参数(w、b)它还将形成一种函数关系,将该函数转换为成本函数(或方差成本函数),描述不同误差成本的预测函数参数
- 反向传播-用这个代价函数修正预测函数参数的过程 修正方法:梯度下降 (·前向传播-将统计观测到的数据发送到预测函数进行预测)
- 训练(或学习)-反复使用前向传播和反向传播的过程,最终达到成本函数的最低点
在w和b实现梯度下降
4、激活函数
对于两极分化的分类问题,神经元预测模型变的无效了
激活函数:
激活函数是非线性的,可以很好地分类,为机器学习注入灵魂
-
把sigmoid激活函数代入预测模型
-
代入激活函数的预测模型的成本函数是一种复杂的复合函数:
-
利用复合函数的链式求导法,找出成本函数w、b上的导数
-
然后调整梯度下降的参数
5、隐藏层
让预测函数产生山丘般的曲线
使神经元形成网络
增加两个神经元,将数据分别发送到这两个神经元进行计算,然后将计算结果发送到第三个神经元进行计算,最后输出
更复杂的分类效果是通过增加更多的抽象维度来实现的。
隐藏层-中间新添加的神经元节点
正是隐藏层的存在使神经网络在复杂情况下继续生效
隐藏层神经元的数量越多,组合就越复杂,问题就越复杂,计算就越大
深度——一个神经网络中纵向的隐藏层比较多(很深)
深度神经网络-隐藏层超过三层
拉链规则-通过反向传播 误差 传播(或分配)到每个权重参数w和偏置项b
将误差e传输到第二层神经元的两个权重参数:
偏置项:
第一层第一输入权重w11_1
第一层第二输入权重w12_1
第一层第二偏置项:
6、高维空间
神经元接收两个参数(输入数据特征维度等于2)
7、初识Keras框架
发生在每个元素上
- 实现一个神经元:
- 使用Keras框架实现神经元:
一层神经元可以称为Dense
8、深度学习
隐藏层需要多少神经元?
简单的定性分析:
可以通过0.高线在俯视图上呈现一个封闭的圆圈,以划分所需隐藏层的神经元数量。
一个神经元是一条直线,如果两个神经元(两条直线)不能关闭,那么需要三个神经元。
二维是线,三维增加厚度
不同或:相同的1不同的0
需要一层包含三个神经元的隐藏层
而且这个网络很难训练:
当初选择sigmoid函数是因为导数处处不是0,所以在反向传输中使用梯度下降算法来计算函数的导数,然后使用这个导数来修正参数
但是sigmoid函数有一个非常严重的问题:
在函数远离中心点的位置,导数极小,梯度下降难以进行–>出现梯度消失的问题
所以现在人们普遍使用Relu作为激活函数的函数
但在实际效果中发现直接使用Relu与使用改进版相比,函数的效果更好Relu函数效果更好,所以它仍然被广泛使用Relu函数(神经网络复杂,隐藏层神经元多)。
除Relu除了函数本身,还有更多的问题会导致梯度消失。
9.卷积神经网络
泛化能力:测试集中模型的准确性
- 欠拟合:模型在训练集中精度低,可能是因为模型太简单
- 过拟合(泛化能力不好):训练集精度高,测试集精度明显下降(用过于复杂的模型拟合一些简单的问题)
调整方法包括:
- 通过训练,模型具有良好的泛化能力来解决问题:训练集和测试集的准确性很高,差别不大
- 几乎不存在确率很低,但测试集的准确率很高
卷积神经网络:
在空间中观察图像数据,具有不可分割的相关性,使用卷积神经网络。
卷积核的参数不是事先设定的,而是通过训练学习的,就像普通神经元的权重一样。
……
输出是一个概率
归一化操作:将灰度值缩放至0~1之间
因为输入数据的灰度值在0-255之间,这意味着一些黑暗部分的像素值很小,而明亮部分的像素值很大。这些数据会导致成本函数(碗)非常不友好(宽、短),使梯度难以下降。
成本函数变成0-1之间的值后,会变得更加均匀,有利于梯度下降
卷积神经网络通常用于图像识别。
一个卷积核训练效果是提取图像的特征,我们需要提取更多的图像 卷积核提取的第二个特征,卷积核提取的第三个特征……
池化层
最大池化层筛选出大值,可以很好地提取主要特征。
池化层不必要,但添加后往往效果好。
由于池化操作是一种固定的套路,在反向传播中没有必要学习的参数。
- 输入是一个32*32的灰度图
- 第一层卷积层变成28层286的
所以用了一个55卷积核(有公式)
如果把mnist图片用55卷积核去卷,得到24卷*24的图片 - 使用了6个卷积核,因此通道数为6
- 池化
- 全连接层
循环神经网络
观察到图像数据空间上有不可分割的相关性 --> 使用卷积神经网络。
在时间上也可能如此,如温度数据、股票数据等。最典型的是人类语言:
- 随着时间的推移,声波通过耳朵传入大脑,一个完整的声波完成后才知道意思是什么。
- 随着时间的推移,单词或单词通过眼睛一个接一个地进入大脑,读完后才知道这句话表达了什么。
神经网络该如何处理这种有关联性的数据呢?以文字举例:
- 单词一般作为自然语言处理的基本单位
- 英语:单词可以通过空格进行分割。在字典中找出这些单词的位置,并按此标记,将句子转换为向量,并发送到神经网络。
- 中文:不能通过空格分词。先分词。以后的处理方法和英语差不多。但是会有一些问题:
因此,有必要进一步处理词汇的表达方法。
但特征提取不当的数据会使神经网络难以训练和泛化。 - 词向量
构成向量的特征
以包含两个特征的二维向量为例:词义越相似,词义越近,反之亦然。
一个词的词向量减去了另一个词的词向量,距离很小。警察和小偷的关系与猫和老鼠非常相似。
NLP:词嵌入技术。 将单词嵌入到特征向量空间中 - 提取词量
1、嵌入矩阵
2、给所有的词做onehot编码,将所有词的onehot编码做成一个矩阵
3、让嵌入矩阵点乘onehot矩阵
4、把这个句子变成词向量矩阵,每一列都是句子中对应的词向量
有了这个嵌入矩阵,可以把一句话中所有的词转换为词向量
5、如果后面接的是全连接神经网络,就把这些词向量铺开作为输入
经过前向传播,得到预测输出
在反向传播时,由于词向量矩阵的运算方法与一个普通全连接层的线性运算部分一样,所以把它称为嵌入层
误差通过反向传播可以继续传递到词嵌入层,并更新(词嵌入矩阵)
嵌入矩阵:词汇表的词向量集合
所以词向量就可以像卷积神经网络中的卷积核那样,在训练中不断学习,最后自己学习到合适的词向量表示
每个特征的含义到了训练最后都会变得很抽象了,但肯定是捕捉到了一定的特征
一般是去使用别人在海量数据上训练好的词向量数据,应用到我们自己的工程中
替换自己的词向量矩阵,并且叫它(自己的)不再更新
11、LSTM网络(长短时记忆网络)
适合序列处理 处理关联的能力
自然语言处理实践
循环神经网络:RNN:
此处的激活函数多采用双曲正切函数tanh,而不是relu(用relu也行)。
像Keras这种编程框架中循环神经网络,默认用tanh
循环神经网络中的第一步不像其他步那样有来自上一步输出的结果一起输入,为了保证每一步操作的统一性,一般会手动添加一个共同输入x0(比如一个为全0的向量) x0,x1 -> a1
经过多次重复,就有机会把这个“好看”的正面意思消解掉,让最后的预测值做出改变,从而产生负向的分类结果。
再加一层RNN
一般2~3层
LSTM:长短时记忆网络:应对更长的序列依赖
除了输入输出以外,还添加了细胞状态的概念(遗忘门、记忆门……)
GRU结构:简化LSTM的结构,很多时候结果相近,目前大家乐于使用GRU