1、一元一次函数感知器
罗森布拉特传感器
调整w 人类提供w的初始值,机器修正w alpha 防止学习率大幅波动
2.方差成本函数
误差e与w成本函数是标准的一元二次函数,成为成本函数。
3.梯度下降和反向传播
调整w的斜率是否大于或等于0。 随机梯度下降:单个样本形成的成本函数
加B后,成本函数:
- ()
- 在w和b实现梯度下降
4、激活函数
对于两极分化的分类问题,神经元预测模型变的无效了 激活函数: 激活函数是非线性的,可以很好地分类,为机器学习注入灵魂
-
把sigmoid激活函数代入预测模型
-
代入激活函数的预测模型的成本函数是一种复杂的复合函数:
-
利用复合函数的链式求导法,找出成本函数w、b上的导数
-
然后调整梯度下降的参数
5、隐藏层
让预测函数产生山丘般的曲线 使神经元形成网络
更复杂的分类效果是通过增加更多的抽象维度来实现的。 隐藏层-中间新添加的神经元节点 正是隐藏层的存在使神经网络在复杂情况下继续生效 隐藏层神经元的数量越多,组合就越复杂,问题就越复杂,计算就越大
深度——一个神经网络中纵向的隐藏层比较多(很深) 深度神经网络-隐藏层超过三层
拉链规则-通过反向传播 误差 传播(或分配)到每个权重参数w和偏置项b
将误差e传输到第二层神经元的两个权重参数: 偏置项: 第一层第一输入权重w11_1 第一层第二输入权重w12_1 第一层第二偏置项:
6、高维空间
神经元接收两个参数(输入数据特征维度等于2)
7、初识Keras框架
发生在每个元素上
- 实现一个神经元:
- 使用Keras框架实现神经元: 一层神经元可以称为Dense
8、深度学习
隐藏层需要多少神经元? 简单的定性分析: 二维是线,三维增加厚度
不同或:相同的1不同的0 需要一层包含三个神经元的隐藏层 而且这个网络很难训练: 当初选择sigmoid函数是因为导数处处不是0,所以在反向传输中使用梯度下降算法来计算函数的导数,然后使用这个导数来修正参数 在函数远离中心点的位置,导数极小,梯度下降难以进行–>出现的问题 所以现在人们普遍使用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网络(长短时记忆网络)
适合序列处理 处理关联的能力 自然语言处理实践
此处的激活函数多采用双曲正切函数tanh,而不是relu(用relu也行)。 像Keras这种编程框架中循环神经网络,默认用tanh
循环神经网络中的第一步不像其他步那样有来自上一步输出的结果一起输入,为了保证每一步操作的统一性,一般会手动添加一个共同输入x0(比如一个为全0的向量) x0,x1 -> a1 经过多次重复,就有机会把这个“好看”的正面意思消解掉,让最后的预测值做出改变,从而产生负向的分类结果。 再加一层RNN 一般2~3层
除了输入输出以外,还添加了细胞状态的概念(遗忘门、记忆门……) GRU结构:简化LSTM的结构,很多时候结果相近,目前大家乐于使用GRU