深度学习笔记(1)机器学习与深度学习基础
文章目录
前言
简单的深度学习与机器学习概念的学习
一、机器学习
1 .什么是机器学习
语音识别:输入一段语音信号,输出文字
f ( )=“howareyou”
图像识别:输入图片,输出图片的属性
f ( )=“cat”
智能控制:输入棋盘局势,输出下一步落棋位置
f( )= =“5∗5”
和把大象放冰箱一样,一共分三步:
1.定义一个函数集合(define a function set)
2.判断函数的好坏(goodness of a function)
3.选择最好的函数(pick the best one)
2.一些基本概念
机器学习的分类
1. 有监督学习:如定义一个数据如月亮,标记为1,要么是月亮,要么不是月亮,让其它识别是不是月亮。
2 .无监督学习:对某些数据利用相似性对它进行聚类。
3 .半监督学习:如一万个用户,有1000个标记,剩下没标记,这就是半监督学习。
4. 增强学习:先得到基础结果,然后在某一状态得到返回,不断得到返回,若干次形成序列进行强化。不仅能利用现有数据,还可以通过对环境的探索获得新数据,并利用新数据循环往复地更新迭代现有模型的机器学习算法。
5. 迁移学习:已知足够多比如1000个物品之后再去做分类,更细致的分类,通俗来讲就是学会举一反三的能力,通过运用已有的知识来学习新的知识,其核心是找到已有知识和新知识之间的相似性,通过这种相似性的迁移达到迁移学习的目的。
回归:(Regression)
回归问题,寻找函数f 的输出为一个数值。一般用于预测。
该问题一般是通过大量的训练数据,找到相对正确的函数。
例如:我们可以从历史的PM2.5的数据中,找到规律,预测未来的PM2.5
分类:(Classification)
分类问题可以分为二分类,和多分类。
二分类就是判断是与不是,多分类就是先准备好给机器提供选项,比如让机器下围棋,看就是从19*19个位置选出一个位置落子。
structured learning结构化预测
回归问题(Regression)来说,这个函数输出一个标量(scalar),对于分类问题(Classification)来说,这个函数输出一个类别,但是有一类预测,不输出一个标量或者类别,而是输出些有结构的输出,比如一个序列,一个句子,一个图,一棵树我们将输出这些结构化结果的过程叫做结构化预测(Structured Prediction).
比如机器翻译输入是一个语言序列,输出是另一种语言序列对于语音识别(Speech Recognition),输入是一段音频,输出是识别的文字序列,也可输出图像文档等.
Case Study
假设预测b站的订阅率,有这个函数y=b+w∗xₗ
xxₗ是这个频道,前一天总共观看的人数,y跟xₗ都是数值。b跟w是未知的参数,它是準备要透过资料去找出来的,我们还不知道w跟b应该是多少,我们只是隐约的猜测
W weight b bias(偏差)
Define Loss from Training Data
b设0.5k,这个w设1 y=0.5k+1X
MAE是误差绝对值的平均,公式为:
MAE计算简单。
MSE均方误差(MSE)是统计学和机器学习中用于评估预测模型准确性的一个常用指标。它衡量的是数据集中预测值与实际值之间的平均平方差。公式为
它能放大偏差较大的值,可以比较不能预测模型稳定性,场景多一些,鲁棒性(Robus音译 强壮的意思)更强。
RMSE 衡量观测值和真实值之间的误差,用来作为机器学习模型预测结果衡量的标准。
越蓝表示效果越好
可以让loss最小的w跟b,我们就叫做w∗w∗ 跟 b∗,b∗,代表说他们是最好的一组w跟b,可以让loss的值最小.。
怎么让LOSS最小呢,那首先你要随机选取一个初始的点,那这个初始的点,我们叫做**w₀*
最后得出的W是让人满意的吗?也许不是,因为者三个步骤合起来只是训练、
Optimization
可以让loss最小的w跟b,我们就叫做w∗ 跟 ,b∗,代表说他们是最好的一组w跟b,可以让loss的值最小.。
怎么让LOSS最小呢,那首先你要随机选取一个初始的点,那这个初始的点,我们叫做**w₀*
最后得出的W是让人满意的吗?也许不是,因为者三个步骤合起来只是训练、
做出一连串的变化就是一次layer,多次layer 就是深度学习,那么是否layer越多越好呢,不一定,layer多训练资料肯定是越来越好,但是真实资料预测不一定越来越好。
二、深度学习
深度学习实际就三个步骤:1 神经网络 2模型评估 3选择最优函数
1.CNN
一般把所有图形弄成同样大小然后输到模型里
每个神经元可以不关注整个图片,只关注其中一个pattern就可以
Receptive Field
感受野Receptive Field 每个神经元只关心这一小块感受野就好了,至于感受野是由你来决定的。 感受野也可以重叠的。
如果选所有channel 就是卷积核,常见的卷积核是3X3
超出图像的范围 就padding 补值,什么是padding 补值呢,就是补0。
把filter和对应位置的参数相乘不是矩阵运算如第一布运算为1x1+1x1+1x1=3
tride是跨度 1就是每次向右移动一个格
有多少filter可以多少层。如64个filter,就会产生64个fitter
把图片缩小,引入了pooling的概念:MAX pooling 用fitter过滤以后进行池化 ,max pool就是选取最大的,pool的作用就是把图片变小,他主要的作用是把图像变小,减少运算量,运算力足够的话就不用池化
Flatten Convolution卷积层之后是无法直接连接Dense全连接层的,需要把Convolution层的数据压平(Flatten),然后就可以直接加Dense层了。
2.自注意力机制
传统的one-hot Encoding 如下
在这里你看不出任何一个资讯,比如哪些是动物,哪些是植物等等。self attention会吃进整个句子,输出的4个向量都是考虑整个句子以后才得到的信息。
两个输入在里面计算关联程度这里的α表示两个向量的关联程度。
具体怎么做呢,如下图q1和k2 K3 K4分别计算关联程度得到三个α,就是A1和A2,A3,A4的关联性。根据α我们知道哪些向量和A1是最有关联性的。
V则表示重要程度
实际上 是把输入的矩阵乘以这三个矩阵就得到QKV,这里面需要学习的只有Wq,Wk和Wv
多头,实际就是分成多个组进行self attention,比如q1,k1一组,q2 k2一组
Postition Encoding
上面的self -attention有个问题,并没有位置信息,为每个位置设定一个vector ei。把这个ei加到ai上面就有了位置信息。
3.Transformer
3.1 sequence to sequence model与encoder
一般的 sequence to sequence model 它里面会分成两块,一块是encoder,另外一块是decoder。你 inbreak sequence 由 encoder 负责处理这个sequence,再把处理好的结果丢给decoder,由 decoder 决定他要输出什么样的sequence。
incoder 要做的事情就是给一排向量输出另外一排向量
在 Transformer 的 encoder 里面,每一个 block 做的事情大概是这样子的,先做一个 self attention,,考虑整个 sequence 的信息后再output另外一排factor,然后factor丢到全连接里就是这层block的输出
transformer的输出比上面的要更复杂一些,就是说这边假设这个 Vector 叫做a,输入的叫做b,你会把A、 b 加起来当做是新的输出,,而得到这个 residual 的这个结果以后再把它做 layer normalization 。
然后上面得到的输出再做一次,layer normalization 才得到最终的输出。
3.2 Decoder
输出的每个向量长度跟中文字的数目是一样多的,那每一个中文的字都会对应到一个数值。分数最高的那一个中文字,它就是最终的输出,在这个例子里面机的分数最高,所以机就当做是这个 decoder 第一个输出,所以 decoder 现在还有两个输入,一个是 begin 这个符号,一个是机,根据这两个输入,得到一个输出,它输出一个蓝色的向量。根据这个蓝色向量里面给每一个中文的字的分数,那我们会决定第二个输出是什么啊?谁哪一个字的分数最高,它就是输出器的,假设器的分数最高,那器就是输出。接下来会拿器当作输入,现在 decoder 看到了begin,看到了机,看到了器,那他接下来还要再决定接下来要输出什么,那他可能就输出学,这个过程就反复的持续下去。
也就是说 decoder 看到的输入,其实是他在前一个时间点自己的输出, decoder 会把自己的输出当做接下来的输入。
可以看decoder比encoder多了一个masked 多头注意力机制。这个mask是什么呢,就是在进行self-attention的时候再计算a2的时候只考虑a1,不考虑后面的a3,a4,计算a3的时候也一样不考虑a4。它只能考虑它左边的东西,它没有办法考虑它右边的东西。
那么怎么让输出结束呢,就是特殊的符号表示end。
可以看到在Decoder中,这个步骤就是 q 来自于decoder, k 跟 b 来自于encoder,这个步骤就叫做 cost attention。所以 decoder 就是凭借着产生一个 q 去 encoder 这边抽取信息出来,当做接下来的 coder 里面的处理。
3.3 Transformer在做一个什么事情?
1.Attention
对于输入的数据,你的关注点是什么?
如何才能让计算机关注到这些有价值的信息?
于是,我们引入了q和k两个概念。你可以将q理解为要去查询的,它用于与其他输入建立联系;而k则可以看作是用于交互的元素,专门用来响应那些试图与你建立联系的输入。通过将自己的q与他人的k(当然,也可以与自己的k)进行乘法运算,我们就能得到一种权重关系。这就是所谓的权重[公式]。也就是说q与k的内积表示有多匹配。
同样,v与q、k一样,都是通过对输入a乘以系数矩阵得到的。因此,定义v实际上就是在a上增加了一层可学习的参数,然后对经过这层参数调整的a进行加权处理,从而利用注意力机制学到的关系。也就是V是实际的特征信息。
首先,行向量[公式]会分别与自己和其他两个行向量进行内积运算(例如,“早”分别与“上”和“好”计算内积),从而得到一个新的向量。回想一下,向量的内积表示了两个向量的夹角,也代表了一个向量在另一个向量上的投影。那么,这个新向量的意义何在?它实际上是行向量[公式]在自己和其他两个行向量上的投影。我们进一步思考,投影值的大小有何含义?
投影值较大,意味着两个向量之间的相关性较高。反之,投影值较小则表明相关性较低。
当我们考虑两个向量的夹角为九十度时,这意味着这两个向量线性无关,它们之间没有任何相关性。
最终的得分值经过softmax就是最终上下文结果,每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征。
那么整个流程如下
1.每个词的Q会跟每一个K计算得分
2.Softmax后就得到整个加权结果
3.此时每个词看的不只是它前面的序列,而是整个输入序列.
4.同一时间计算出所有词的表示结果
2.多头机制
通过不同的head得到多个特征表达:第一组qkv得出一种特征,分别做出很多种特征
将所有特征拼接在一起。
可以通过再一层全连接来降维(再用全连接层降维)
3.输入部分
Embbedding
这个很简单,用Word2Vec或者随机初始化都可以,但是哪个效果好需要你自己去实验。
位置编码
偶数的位置使用sin,奇数位置使用cos
得到位置编码后将,位置编码和Embedding的512个向量相加,得到整个Transformer的输入
借助上述公式,我们可以得到一个特定位置的dmodel 维的位置向量,并且借助三角函数的性质
sin(α+β)= sinacosβ+cosαsinβ
cos(α+ β) = cosαcosβ- sinasinβ
上面两个公式是三角函数的性质,通过上面可以推导出下面的公式
{PE(pos + k,2i) = PE(pos,2i)× PE(k,2i + 1) + PE(pos,2i + 1) × PE(k,2i)
(PE(pos +k,2i + 1) =PE(pos,2i + 1) × PE(k,2i+ 1)-PE(pos,2i)× PE(k,2i)
比如pos代表我,pos+k代表你,k代表爱,那么就是说你可以被你和爱两者线性组合起来,这样的线性组合意味着位置向量中蕴含了相对位置信息。
Attention
(
Q
,
K
,
V
)
=
softmax
(
Q
K
T
d
k
)
V
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
Attention(Q,K,V)=softmax(dkQKT)V
q
4.输出部分
加入了MASK机制。
就是说未生成的单词应该被mask住
你可以看到单词am对前面所有单词都有值,但是对fine没有值,也就是不要关注fine。
总结
一些深度学习的简单概念和Transformer的学习。