diff --git a/BasicAlgorithm/BatchNormVsLayerNorm.md b/BasicAlgorithm/BatchNormVsLayerNorm.md
deleted file mode 100644
index 9ae6b1d..0000000
--- a/BasicAlgorithm/BatchNormVsLayerNorm.md
+++ /dev/null
@@ -1,180 +0,0 @@
-# 【关于 BatchNorm vs LayerNorm】那些你不知道的事
-
-
-
-## 一、动机篇
-
-### 1.1 独立同分布(independent and identically distributed)与白化
-
-- 独立同分布
- - 为什么?
- - 独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力
- - 相关性:
- - 强相关:Naive Bayes 模型就建立在特征彼此独立的基础之
- - 弱相关:Logistic Regression 和 神经网络 则在非独立的特征数据上依然可以训练出很好的模型
-- 白化【数据预处理步骤】
- - 作用:
- - 去除特征间的相关性 -> 独立;
- - 使所有特征具有相同的均值和方差 -> 同分布
-
-### 1.2 ( Internal Covariate Shift,ICS)
-
-- 动机:深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
-- 模型训练对于数据的一个假设:“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如 transfer learning / domain adaptation 等。而 covariate shift 就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同;
-- ICS 【每个神经元的输入数据不再是“独立同分布”】导致的后果:
- - 上层参数需要不断适应新的输入数据分布,降低学习速度;
- - 下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止;
- - 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎;
-
-### 1.3 ICS问题带来的后果是什么?
-
-1. 上层参数需要不断适应新的输入数据分布,导致学习速度下降;
-2. 下层输入的变化可能趋于变大或变小,导致上层落入饱和区,从而学习过早停止;
-3. 每层的更新都会影响到其他层,因此每层参数更新策略需要尽可能谨慎;
-
-## 二、Normalization 篇
-
-### 2.1 Normalization 的通用框架与基本思想
-
-- 前言
-
-假设 神经元的输入:
-
-
-
-输出的结果:
-
-
-
-- ICS 问题: X 的 分布可能相差很大
-- 解决方法:
- - 方法:对每一层的数据做白化操作
- - 存在问题:成本高,因为要保证 白化操作是可微的
-
-- 基本思想:在将 x 送给神经元之前,先对其做平移和伸缩变换, 将 x 的分布规范化成在固定区间范围的标准分布;
-- 变换框架:
-
-
-
-> 参数介绍:
-> μ:平移参数
-> δ:缩放参数
-
-- 步骤:
-1. 对 x 进行 shift 和 scale 变换
-
-
-
-> 得到的数据符合均值为 0、方差为 1 的标准分布
-
-1. b 是再平移参数(re-shift parameter), g 是再缩放参数(re-scale parameter),再进一步变换为
-
-
-
-> 得到的数据符合均值为 b 、方差为 $g^2$ 的分布
-
-## 三、Batch Normalization 篇
-
-### 3.1 Batch Normalization(纵向规范化)是什么?
-
-
-
-- 方式:针对单个神经元进行,利用网络训练时一个 mini-batch 的数据来计算该神经元 $x_i$ 的均值和方差,因而称为 Batch Normalization。
-
-
-
-> 其中 M 是 mini-batch 的大小。
-
-### 3.2 Batch Normalization(纵向规范化)存在什么问题?
-
-- BN 独立地规范化每一个输入维度 $x_i$ ,但规范化的参数是一个 mini-batch 的一阶统计量和二阶统计量。这就要求 每一个 mini-batch 的统计量是整体统计量的近似估计,或者说每一个 mini-batch 彼此之间,以及和整体数据,都应该是近似同分布的。分布差距较小的 mini-batch 可以看做是为规范化操作和模型训练引入了噪声,可以增加模型的鲁棒性;但如果每个 mini-batch的原始分布差别很大,那么不同 mini-batch 的数据将会进行不一样的数据变换,这就增加了模型训练的难度。
-- 由于 BN 需要在运行过程中统计每个 mini-batch 的一阶统计量和二阶统计量,因此不适用于 动态的网络结构 和 RNN 网络
-
-### 3.3 Batch Normalization(纵向规范化)适用的场景是什么?
-
-每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。
-
-### 3.4 BatchNorm 存在什么问题?
-
-1. BN特别依赖Batch Size;当Batch size很小的时候,BN的效果就非常不理想了。在很多情况下,Batch size大不了,因为你GPU的显存不够。所以,通常会有其他比较麻烦的手段去解决这个问题,比如MegDet的CGBN等;
-2. BN对处理序列化数据的网络比如RNN是不太适用的;So,BN的应用领域减少了一半;
-3. BN只在训练的时候用,inference的时候不会用到,因为inference的输入不是批量输入。
-
-## 四、Layer Normalization(横向规范化) 篇
-
-### 4.1 Layer Normalization(横向规范化)是什么?
-
-
-
-- 方式:综合考虑一层所有维度的输入,计算该层的平均输入值和输入方差,然后用同一个规范化操作来转换各个维度的输入。
-
-
-
-> 其中 i 枚举了该层所有的输入神经元。对应到标准公式中,四大参数 μ, δ, g, b 均为标量(BN中是向量),所有输入共享一个规范化变换。
-
-### 4.2 Layer Normalization(横向规范化)有什么用?
-
-LN 针对单个训练样本进行,不依赖于其他数据,因此可以避免 BN 中受 mini-batch 数据分布影响的问题,可以用于 小mini-batch场景、动态网络场景和 RNN,特别是自然语言处理领域。此外,LN 不需要保存 mini-batch 的均值和方差,节省了额外的存储空间。
-
-## 五、BN vs LN 篇
-
-BN 的转换是针对单个神经元可训练的——不同神经元的输入经过再平移和再缩放后分布在不同的区间,而 LN 对于一整层的神经元训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么 LN 的处理可能会降低模型的表达能力。
-
-## 六、主流 Normalization 方法为什么有效?
-
-
-
-1. Normalization 的权重伸缩不变性
-
-- 介绍:权重 W 按照常量 λ 进行伸缩时,得到的规范化后的值保持不变
-
-
-
-> 其中:W' = λW
-
-- 原因:当权重 W 伸缩时,对应的均值和标准差均等比例伸缩,分子分母相抵。
-
-
-
-- 优点:
- - 权重伸缩不变性可以有效地提高反向传播的效率
-
-
-
-> 注:因此,权重的伸缩变化不会影响反向梯度的 Jacobian 矩阵,因此也就对反向传播没有影响,避免了反向传播时因为权重过大或过小导致的梯度消失或梯度爆炸问题,从而加速了神经网络的训练。
-
- - 权重伸缩不变性还具有参数正则化的效果,可以使用更高的学习率。
-
-
-
-> 因此,下层的权重值越大,其梯度就越小。这样,参数的变化就越稳定,相当于实现了参数正则化的效果,避免参数的大幅震荡,提高网络的泛化性能。
-
-2. Normalization 的数据伸缩不变性
-
-- 介绍:当数据 x 按照常量 λ 进行伸缩时,得到的规范化后的值保持不变
-
-
-
-> 注:x'= λx
-
-- 优点:
- - 数据伸缩不变性可以有效地减少梯度弥散,简化对学习率的选择
-
-对于某一层神经元 :
-
-
-
-可得:
-
-
-
-每一层神经元的输出依赖于底下各层的计算结果。如果没有正则化,当下层输入发生伸缩变化时,经过层层传递,可能会导致数据发生剧烈的膨胀或者弥散,从而也导致了反向计算时的梯度爆炸或梯度弥散。
-
-加入 Normalization 之后,不论底层的数据如何变化,对于某一层神经元 而言,其输入 $x_i$ 永远保持标准的分布,这就使得高层的训练更加简单。从梯度的计算公式来看:
-
-
-
-数据的伸缩变化也不会影响到对该层的权重参数更新,使得训练过程更加鲁棒,简化了对学习率的选择。
-
-
-
diff --git a/BasicAlgorithm/img/1610160500583.png b/BasicAlgorithm/img/1610160500583.png
deleted file mode 100644
index 36e28d4..0000000
Binary files a/BasicAlgorithm/img/1610160500583.png and /dev/null differ
diff --git a/BasicAlgorithm/img/1610177872501.png b/BasicAlgorithm/img/1610177872501.png
deleted file mode 100644
index dac4a6e..0000000
Binary files a/BasicAlgorithm/img/1610177872501.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20180404113714719.png b/BasicAlgorithm/img/20180404113714719.png
deleted file mode 100644
index 214d398..0000000
Binary files a/BasicAlgorithm/img/20180404113714719.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20180404135638186.png b/BasicAlgorithm/img/20180404135638186.png
deleted file mode 100644
index ec7f811..0000000
Binary files a/BasicAlgorithm/img/20180404135638186.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20180404150134375.png b/BasicAlgorithm/img/20180404150134375.png
deleted file mode 100644
index cef86fe..0000000
Binary files a/BasicAlgorithm/img/20180404150134375.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200812200223.png b/BasicAlgorithm/img/20200812200223.png
deleted file mode 100644
index 0811a3d..0000000
Binary files a/BasicAlgorithm/img/20200812200223.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200812200551.png b/BasicAlgorithm/img/20200812200551.png
deleted file mode 100644
index deb0248..0000000
Binary files a/BasicAlgorithm/img/20200812200551.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200812200740.png b/BasicAlgorithm/img/20200812200740.png
deleted file mode 100644
index 525b625..0000000
Binary files a/BasicAlgorithm/img/20200812200740.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200812203815.png b/BasicAlgorithm/img/20200812203815.png
deleted file mode 100644
index 9677ecd..0000000
Binary files a/BasicAlgorithm/img/20200812203815.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200812204613.png b/BasicAlgorithm/img/20200812204613.png
deleted file mode 100644
index c762226..0000000
Binary files a/BasicAlgorithm/img/20200812204613.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200906192126.png b/BasicAlgorithm/img/20200906192126.png
deleted file mode 100644
index c4d6678..0000000
Binary files a/BasicAlgorithm/img/20200906192126.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200906192221.png b/BasicAlgorithm/img/20200906192221.png
deleted file mode 100644
index 21e2bba..0000000
Binary files a/BasicAlgorithm/img/20200906192221.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20200906192249.png b/BasicAlgorithm/img/20200906192249.png
deleted file mode 100644
index 22b4175..0000000
Binary files a/BasicAlgorithm/img/20200906192249.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223130440.png b/BasicAlgorithm/img/20201223130440.png
deleted file mode 100644
index 5bfaa76..0000000
Binary files a/BasicAlgorithm/img/20201223130440.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223130525.png b/BasicAlgorithm/img/20201223130525.png
deleted file mode 100644
index 8074582..0000000
Binary files a/BasicAlgorithm/img/20201223130525.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223131020.png b/BasicAlgorithm/img/20201223131020.png
deleted file mode 100644
index 2fd2a58..0000000
Binary files a/BasicAlgorithm/img/20201223131020.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223131344.png b/BasicAlgorithm/img/20201223131344.png
deleted file mode 100644
index 6f004d0..0000000
Binary files a/BasicAlgorithm/img/20201223131344.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223131446.png b/BasicAlgorithm/img/20201223131446.png
deleted file mode 100644
index 7e25651..0000000
Binary files a/BasicAlgorithm/img/20201223131446.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223131525.png b/BasicAlgorithm/img/20201223131525.png
deleted file mode 100644
index 2343744..0000000
Binary files a/BasicAlgorithm/img/20201223131525.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223132028.png b/BasicAlgorithm/img/20201223132028.png
deleted file mode 100644
index 7e741af..0000000
Binary files a/BasicAlgorithm/img/20201223132028.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223132145.png b/BasicAlgorithm/img/20201223132145.png
deleted file mode 100644
index 41f6138..0000000
Binary files a/BasicAlgorithm/img/20201223132145.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223132445.png b/BasicAlgorithm/img/20201223132445.png
deleted file mode 100644
index d6db901..0000000
Binary files a/BasicAlgorithm/img/20201223132445.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223132538.png b/BasicAlgorithm/img/20201223132538.png
deleted file mode 100644
index bf7cf1b..0000000
Binary files a/BasicAlgorithm/img/20201223132538.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223135451.png b/BasicAlgorithm/img/20201223135451.png
deleted file mode 100644
index 4fc276b..0000000
Binary files a/BasicAlgorithm/img/20201223135451.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223135552.png b/BasicAlgorithm/img/20201223135552.png
deleted file mode 100644
index a66dd30..0000000
Binary files a/BasicAlgorithm/img/20201223135552.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223135720.png b/BasicAlgorithm/img/20201223135720.png
deleted file mode 100644
index 2b7dc59..0000000
Binary files a/BasicAlgorithm/img/20201223135720.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223135807.png b/BasicAlgorithm/img/20201223135807.png
deleted file mode 100644
index 5426781..0000000
Binary files a/BasicAlgorithm/img/20201223135807.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223135855.png b/BasicAlgorithm/img/20201223135855.png
deleted file mode 100644
index cba1f27..0000000
Binary files a/BasicAlgorithm/img/20201223135855.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223140010.png b/BasicAlgorithm/img/20201223140010.png
deleted file mode 100644
index 3098a3d..0000000
Binary files a/BasicAlgorithm/img/20201223140010.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223140135.png b/BasicAlgorithm/img/20201223140135.png
deleted file mode 100644
index e026375..0000000
Binary files a/BasicAlgorithm/img/20201223140135.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223140211.png b/BasicAlgorithm/img/20201223140211.png
deleted file mode 100644
index 00db714..0000000
Binary files a/BasicAlgorithm/img/20201223140211.png and /dev/null differ
diff --git a/BasicAlgorithm/img/20201223140304.png b/BasicAlgorithm/img/20201223140304.png
deleted file mode 100644
index 717df5b..0000000
Binary files a/BasicAlgorithm/img/20201223140304.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-16-19.png b/BasicAlgorithm/img/2021-01-06-16-16-19.png
deleted file mode 100644
index 8572051..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-16-19.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-16-50.png b/BasicAlgorithm/img/2021-01-06-16-16-50.png
deleted file mode 100644
index 5befe41..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-16-50.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-21-27.png b/BasicAlgorithm/img/2021-01-06-16-21-27.png
deleted file mode 100644
index 0efa4bf..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-21-27.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-22-53.png b/BasicAlgorithm/img/2021-01-06-16-22-53.png
deleted file mode 100644
index 07eb893..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-22-53.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-25-42.png b/BasicAlgorithm/img/2021-01-06-16-25-42.png
deleted file mode 100644
index 0f8aff3..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-25-42.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-29-17.png b/BasicAlgorithm/img/2021-01-06-16-29-17.png
deleted file mode 100644
index 4db5a05..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-29-17.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-30-53.png b/BasicAlgorithm/img/2021-01-06-16-30-53.png
deleted file mode 100644
index 4c5026b..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-30-53.png and /dev/null differ
diff --git a/BasicAlgorithm/img/2021-01-06-16-37-37.png b/BasicAlgorithm/img/2021-01-06-16-37-37.png
deleted file mode 100644
index 0c79822..0000000
Binary files a/BasicAlgorithm/img/2021-01-06-16-37-37.png and /dev/null differ
diff --git "a/BasicAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/BasicAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 6a2c781..0000000
Binary files "a/BasicAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/BasicAlgorithm/img/BatchNormvsLayerNorm.png b/BasicAlgorithm/img/BatchNormvsLayerNorm.png
deleted file mode 100644
index 611891e..0000000
Binary files a/BasicAlgorithm/img/BatchNormvsLayerNorm.png and /dev/null differ
diff --git "a/BasicAlgorithm/img/BatchNorm\346\223\215\344\275\234.png" "b/BasicAlgorithm/img/BatchNorm\346\223\215\344\275\234.png"
deleted file mode 100644
index 82245b5..0000000
Binary files "a/BasicAlgorithm/img/BatchNorm\346\223\215\344\275\234.png" and /dev/null differ
diff --git a/BasicAlgorithm/img/CNN.png b/BasicAlgorithm/img/CNN.png
deleted file mode 100644
index 2e96f24..0000000
Binary files a/BasicAlgorithm/img/CNN.png and /dev/null differ
diff --git "a/BasicAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/BasicAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 882606b..0000000
Binary files "a/BasicAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/BasicAlgorithm/img/Normalization.png b/BasicAlgorithm/img/Normalization.png
deleted file mode 100644
index bdda78e..0000000
Binary files a/BasicAlgorithm/img/Normalization.png and /dev/null differ
diff --git a/BasicAlgorithm/img/batch_size.png b/BasicAlgorithm/img/batch_size.png
deleted file mode 100644
index b43d656..0000000
Binary files a/BasicAlgorithm/img/batch_size.png and /dev/null differ
diff --git a/BasicAlgorithm/img/cnn-dilation-in_7_out_3.gif b/BasicAlgorithm/img/cnn-dilation-in_7_out_3.gif
deleted file mode 100644
index 98158a6..0000000
Binary files a/BasicAlgorithm/img/cnn-dilation-in_7_out_3.gif and /dev/null differ
diff --git a/BasicAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg b/BasicAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg
deleted file mode 100644
index 9d14672..0000000
Binary files a/BasicAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg and /dev/null differ
diff --git a/BasicAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg b/BasicAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg
deleted file mode 100644
index a6aa05e..0000000
Binary files a/BasicAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg and /dev/null differ
diff --git "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" "b/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png"
deleted file mode 100644
index b126f64..0000000
Binary files "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" "b/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg"
deleted file mode 100644
index 354bb07..0000000
Binary files "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" "b/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg"
deleted file mode 100644
index f4d8010..0000000
Binary files "a/BasicAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png"
deleted file mode 100644
index 1df5ee5..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png"
deleted file mode 100644
index a65a966..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png"
deleted file mode 100644
index 881b3e2..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png"
deleted file mode 100644
index 6c42db6..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203230623.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203230623.png"
deleted file mode 100644
index afae5b5..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203230623.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203231140.png" "b/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203231140.png"
deleted file mode 100644
index 62b58e6..0000000
Binary files "a/BasicAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203231140.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" "b/BasicAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png"
deleted file mode 100644
index f7f5368..0000000
Binary files "a/BasicAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\346\255\243\345\210\231\345\214\226.png" "b/BasicAlgorithm/img/\346\255\243\345\210\231\345\214\226.png"
deleted file mode 100644
index ff8a910..0000000
Binary files "a/BasicAlgorithm/img/\346\255\243\345\210\231\345\214\226.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" "b/BasicAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png"
deleted file mode 100644
index 0325d90..0000000
Binary files "a/BasicAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" "b/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png"
deleted file mode 100644
index 8505602..0000000
Binary files "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" "b/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png"
deleted file mode 100644
index 6e0246a..0000000
Binary files "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" "b/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png"
deleted file mode 100644
index da180da..0000000
Binary files "a/BasicAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" "b/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png"
deleted file mode 100644
index 201909f..0000000
Binary files "a/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" "b/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png"
deleted file mode 100644
index 923e9db..0000000
Binary files "a/BasicAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" and /dev/null differ
diff --git "a/BasicAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" "b/BasicAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png"
deleted file mode 100644
index 8d1b1bb..0000000
Binary files "a/BasicAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" and /dev/null differ
diff --git "a/BasicAlgorithm/\344\274\230\345\214\226\347\256\227\346\263\225\345\217\212\345\207\275\346\225\260.md" "b/BasicAlgorithm/\344\274\230\345\214\226\347\256\227\346\263\225\345\217\212\345\207\275\346\225\260.md"
deleted file mode 100644
index 6834150..0000000
--- "a/BasicAlgorithm/\344\274\230\345\214\226\347\256\227\346\263\225\345\217\212\345\207\275\346\225\260.md"
+++ /dev/null
@@ -1,214 +0,0 @@
-# 【关于 优化算法】那些你不知道的事
-
-
-
-## 一、动机篇
-
-### 1.1 为什么需要 优化函数?
-
-在机器学习算法中,通常存在很多问题并没有最优的解,或是要计算出最优的解要花费很大的计算量,面对这类问题一般的做法是利用迭代的思想尽可能的逼近问题的最优解。将解决此类优化问题的方法叫做优化算法,优化算法本质上是一种数学方法。
-
-### 1.2 优化函数的基本框架是什么?
-
-- 基本框架:定义当前时刻待优化参数为$\theta_t\in R^{d}$,损失函数为$J(\theta)$,学习率为$\eta$,参数更新框架为:
-
-1. 计算损失函数关于当前参数的梯度:$g_t=\nabla J(\theta_t)$;
-2. 根据历史梯度计算一阶动量(一次项)和二阶动量(二次项):$m_t=\phi(g_1,g_2,...,g_t),V_t=\psi(g_1,g_2,...,g_t)$;
-3. 计算当前时刻的下降梯度:$\Delta\theta_t=-\eta\cdot\cfrac{m_t}{\sqrt{V_t}}$
-4. 根据下降梯度更新参数:$\theta_{t+1}=\theta_t+\Delta\theta_t$
-
-## 二、优化函数介绍篇
-
-### 2.1 梯度下降法是什么?
-
-每次使用一批数据进行梯度的计算,而非计算全部数据的梯度,因为如果每次计算全部数据的梯度,会导致运算量加大,运算时间变长,容易陷入局部最优解,而随机梯度下降可能每次不是朝着真正最小的方向,这样反而可以跳出局部的最优解。
-
-### 2.2 随机梯度下降法是什么?
-
-- 介绍:由于SGD没有动量的概念,也即没有考虑历史梯度,所以当前时刻的动量即为当前时刻的梯度$m_t=g_t$,且二阶动量$V_t=E$,所以SGD的参数更新公式为
-
- $$\Delta\theta_t=-\eta\cdot g_t$$
-
- $$\theta_{t+1}=\theta_t-\eta\cdot g_t$$
-
-- 优点:每次使用一批数据进行梯度的计算,而非计算全部数据的梯度,因为如果每次计算全部数据的梯度,会导致运算量加大,运算时间变长,容易陷入局部最优解,而随机梯度下降可能每次不是朝着真正最小的方向,这样反而可以跳出局部的最优解。
-
-- 缺点:下降速度慢,而且可能会在沟壑(还有鞍点)的两边持续震荡,停留在一个局部最优点。
-
-### 2.3 Momentum 是什么?
-
-- 介绍:为了抑制SGD的震荡,SGDM认为梯度下降过程可以加入惯性。下坡的时候,如果发现是陡坡,那就利用惯性跑的快一些。SGDM全称是SGD with momentum,在SGD基础上引入了一阶动量。而所谓的一阶动量就是该时刻梯度的指数加权移动平均值:$\eta\cdot m_t:=\beta\cdot m_{t-1}+\eta\cdot g_t$(其中当前时刻的梯度$g_t$并不严格按照指数加权移动平均值的定义采用权重$1-\beta$,而是使用我们自定义的学习率$\eta$),那么为什么要用移动平均而不用历史所有梯度的平均?因为移动平均存储量小,且能近似表示历史所有梯度的平均。由于此时仍然没有二阶动量,所以$V_t=E$,那么SGDM的参数更新公式为
-
- $$\Delta\theta_t=-\eta\cdot m_t=-\left(\beta m_{t-1}+\eta g_t\right)$$
-
- $$\theta_{t+1}=\theta_t-\left(\beta m_{t-1}+\eta g_t\right)$$
-
-- 所以,当前时刻参数更新的方向不光取决于当前时刻的梯度,还取决于之前时刻的梯度,特别地,当$\beta=0.9$时,$m_t$近似表示的是前10个时刻梯度的指数加权移动平均值,而且离得越近的时刻的梯度权重也越大。
-- 优点:在随机梯度下降法的基础上,增加了动量(Momentum)的技术。其核心是通过优化相关方向的训练和弱化无关方向的振荡,来加速SGD训练。Momentum的方法能够在一定程度上缓解随机梯度下降法收敛不稳定的问题,并且有一定的摆脱陷入局部最优解的能力。
-- 缺点:对于比较深的沟壑有时用Momentum也没法跳出
-
- - 指数加权移动平均值(exponentially weighted moving average,EWMA):假设$v_{t-1}$是$t-1$时刻的指数加权移动平均值,$\theta_t$是$t$时刻的观测值,那么$t$时刻的指数加权移动平均值为
-
- $$
- \begin{aligned}
- v_t&=\beta v_{t-1}+(1-\beta)\theta_t \\
- &=(1-\beta)\theta_t+\sum_{i=1}^{t-1}(1-\beta)\beta^i\theta_{t-i}
- \end{aligned}
- $$
-
- > 其中$0 \leq \beta < 1,v_0=0$。显然,由上式可知,$t$时刻的指数加权移动平均值其实可以看做前$t$时刻所有观测值的加权平均值,除了第$t$时刻的观测值权重为$1-\beta$外,其他时刻的观测值权重为$(1-\beta)\beta^i$。由于通常对于那些权重小于$\frac{1}{e}$的观测值可以忽略不计,所以忽略掉那些观测值以后,上式就可以看做在求加权移动平均值。那么哪些项的权重会小于$\frac{1}{e}$呢?由于
-
- $$\lim_{n \rightarrow +\infty} \left(1-\frac{1}{n}\right)^n = \frac{1}{e} \approx 0.3679$$
-
- > 若令$n=\frac{1}{1-\beta}$,则
-
- $$\lim_{n \rightarrow +\infty} \left(1-\frac{1}{n}\right)^n =\lim_{\beta \rightarrow 1} \left(\beta\right)^{\frac{1}{1-\beta}}=\frac{1}{e} \approx 0.3679$$
-
- > 所以,当$\beta\rightarrow 1$时,那些$i\geq\frac{1}{1-\beta}$的$\theta_{t-i}$的权重$(1-\beta)\beta^i$一定小于$\frac{1}{e}$。代入计算可知,那些权重小于$\frac{1}{e}$的观测值就是近$\frac{1}{1-\beta}$个时刻之前的观测值。例如当$t=20,\beta=0.9$时,$\theta_1,\theta_2,..,\theta_9,\theta_{10}$的权重都是小于$\frac{1}{e}$的,因此可以忽略不计,那么此时就相当于在求$\theta_11,\theta_12,..,\theta_19,\theta_{20}$这最近10个时刻的加权移动平均值。所以指数移动平均值可以近似看做在求最近$\frac{1}{1-\beta}$个时刻的加权移动平均值,$\beta$常取$\geq 0.9$。由于当$t$较小时,指数加权移动平均值的偏差较大,所以通常会加上一个修正因子$1-\beta^t$,加了修正因子后的公式为
-
- $$v_t=\cfrac{\beta v_{t-1}+(1-\beta)\theta_t}{1-\beta^t} \\$$
-
- > 显然,当$t$很小时,修正因子$1-\beta^t$会起作用,当$t$足够大时$(1-\beta^t)\rightarrow 1$,修正因子会自动退场。
-
-### 2.4 SGD with Nesterov Acceleration 是什么?
-
-- 介绍:除了利用惯性跳出局部沟壑以外,我们还可以尝试往前看一步。想象一下你走到一个盆地,四周都是略高的小山,你觉得没有下坡的方向,那就只能待在这里了。可是如果你爬上高地,就会发现外面的世界还很广阔。因此,我们不能停留在当前位置去观察未来的方向,而要向前一步、多看一步、看远一些。NAG全称Nesterov Accelerated Gradient,是在SGD、SGD-M的基础上的进一步改进,改进点在于当前时刻梯度的计算,我们知道在时刻t的主要下降方向是由累积动量决定的,自己的梯度方向说了也不算,那与其看当前梯度方向,不如先看看如果跟着累积动量走了一步,那个时候再怎么走。也即在Momentum的基础上将当前时刻的梯度$g_t$换成下一时刻的梯度$\nabla J(\theta_t-\beta m_{t-1})$,由于此时也没有考虑二阶动量,所以$V_t=E$,NAG的参数更新公式为
-
- $$\Delta\theta_t=-\eta\cdot m_t=-\left(\beta m_{t-1}+\eta\nabla J(\theta_t-\beta m_{t-1})\right)$$
-
- $$\theta_{t+1}=\theta_t-\left(\beta m_{t-1}+\eta\nabla J(\theta_t-\beta m_{t-1})\right)$$
-
-- 优点:在Momentum的基础上进行了改进,比Momentum更具有前瞻性,除了利用历史梯度作为惯性来跳出局部最优的沟壑以外,还提前走一步看看能否直接跨过沟壑。
-
-### 2.5 Adagrad 是什么?
-
-- 介绍:此前我们都没有用到二阶动量。二阶动量的出现,才意味着“自适应学习率”优化算法时代的到来。SGD及其变种以同样的学习率更新每个维度的参数(因为$\theta_t$通常是向量),但深度神经网络往往包含大量的参数,这些参数并不是总会用得到(想想大规模的embedding)。对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。因此,AdaGrad则考虑对于不同维度的参数采用不同的学习率,具体的,对于那些更新幅度很大的参数,通常历史累计梯度的平方和会很大,相反的,对于那些更新幅度很小的参数,通常其累计历史梯度的平方和会很小(具体图示参见:https://zhuanlan.zhihu.com/p/29920135 )。所以在一个固定学习率的基础上除以历史累计梯度的平方和就能使得那些更新幅度很大的参数的学习率变小,同样也能使得那些更新幅度很小的参数学习率变大,所以AdaGrad的参数更新公式为
-
- $$v_{t,i}=\sum_{t=1}^{t}g_{t,i}^2$$
- $$\Delta\theta_{t,i}=-\frac{\eta}{\sqrt{v_{t,i}+\epsilon}}g_{t,i}$$
-
- $$\theta_{t+1,i}=\theta_{t,i}-\frac{\eta}{\sqrt{v_{t,i}+\epsilon}}g_{t,i}$$
-
-> 其中$g_{t,i}^2$表示第$t$时刻第$i$维度参数的梯度值,$\epsilon$是防止分母等于0的平滑项(常取一个很小的值$1e-8$)。显然,此时上式中的$\frac{\eta}{\sqrt{v_{t,i}+\epsilon}}$这个整体可以看做是学习率,分母中的历史累计梯度值$v_{t,i}$越大的参数学习率越小。上式仅仅是第$t$时刻第$i$维度参数的更新公式,对于第$t$时刻的所有维度参数的整体更新公式为
-
- $$V_{t}=\operatorname{diag}\left(v_{t,1},v_{t,2},...,v_{t,d}\right)\in R^{d\times d}$$
-
- $$\Delta\theta_{t}=-\frac{\eta}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
- $$\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
-> 注意,由于$V_t$是对角矩阵,所以上式中的$\epsilon$只用来平滑$V_t$对角线上的元素。
-
-- 优点:Adagrad即adaptive gradient,是一种自适应学习率的梯度法。它通过记录并调整每次迭代过程中的前进方向和距离,使得针对不同问题都有一套自适应学习率的方法。Adagrad最大的优势是不需要手动来调整学习率,但与此同时会降低学习率。
-- 缺点:随着时间步的拉长,历史累计梯度平方和$v_{t,i}$会越来越大,这样会使得所有维度参数的学习率都不断减小(单调递减),无论更新幅度如何。而且,计算历史累计梯度平方和时需要存储所有历史梯度,而通常神经网络的参数不仅多维度还高,因此存储量巨大。
-
-### 2.6 RMSProp/AdaDelta 是什么?
-
-- 介绍a:由于AdaGrad单调递减的学习率变化过于激进,我们考虑一个改变二阶动量计算方法的策略:不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度,采用Momentum中的指数加权移动平均值的思路。这也就是AdaDelta名称中Delta的来历。首先看最简单直接版的RMSProp,RMSProp就是在AdaGrad的基础上将普通的历史累计梯度平方和换成历史累计梯度平方和的指数加权移动平均值,所以只需将AdaGrad中的$v_{t,i}$的公式改成指数加权移动平均值的形式即可,也即
-
- $$v_{t,i}=\beta v_{t-1,i}+(1-\beta)g_{t,i}^2$$
-
- $$V_{t}=\operatorname{diag}\left(v_{t,1},v_{t,2},...,v_{t,d}\right)\in R^{d\times d}$$
-
- $$\Delta\theta_{t}=-\frac{\eta}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
- $$\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
- 而AdaDelta除了对二阶动量计算指数加权移动平均以外,还对当前时刻的下降梯度$\Delta\theta_{t}$也计算一个指数加权移动平均,具体地
-
- $$\operatorname{E}[\Delta\theta^2]_{t,i}=\gamma\operatorname{E}[\Delta\theta^2]_{t-1,i}+(1-\gamma)\Delta\theta^2_{t,i}$$
-
- 由于$\Delta\theta^2_{t,i}$目前是未知的,所以只能用$t-1$时刻的指数加权移动平均来近似替换,也即
-
- $$\operatorname{E}[\Delta\theta^2]_{t-1,i}=\gamma\operatorname{E}[\Delta\theta^2]_{t-2,i}+(1-\gamma)\Delta\theta^2_{t-1,i}$$
-
- 除了计算出$t-1$时刻的指数加权移动平均以外,AdaDelta还用此值替换我们预先设置的学习率$\eta$,因此,AdaDelta的参数更新公式为
-
- $$v_{t,i}=\beta v_{t-1,i}+(1-\beta)g_{t,i}^2$$
-
- $$V_{t}=\operatorname{diag}\left(v_{t,1},v_{t,2},...,v_{t,d}\right)\in R^{d\times d}$$
-
- $$\operatorname{E}[\Delta\theta^2]_{t-1,i}=\gamma\operatorname{E}[\Delta\theta^2]_{t-2,i}+(1-\gamma)\Delta\theta^2_{t-1,i}$$
-
- $$\Theta_{t}=\operatorname{diag}\left(\operatorname{E}[\Delta\theta^2]_{t-1,1},\operatorname{E}[\Delta\theta^2]_{t-1,2},...,\operatorname{E}[\Delta\theta^2]_{t-1,d}\right)\in R^{d\times d}$$
-
- $$\Delta\theta_{t}=-\frac{\sqrt{\Theta_{t}+\epsilon}}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
- $$\theta_{t+1}=\theta_{t}-\frac{\sqrt{\Theta_{t}+\epsilon}}{\sqrt{V_{t}+\epsilon}}\odot g_t$$
-
-> 显然,对于AdaDelta算法来说,已经不需要我们自己预设学习率$\eta$了,只需要预设$\beta$和$\gamma$这两个指数加权移动平均值的衰减率即可。
-- 优点:和AdamGrad一样对不同维度的参数采用不同的学习率,同时还改进了AdamGrad的梯度不断累积和需要存储所有历史梯度的缺点(因为移动平均不需要存储所有历史梯度)。特别地,对于AdaDelta还废除了预设的学习率,当然效果好不好还是需要看实际场景。
-
-### 2.7 Adam 是什么?
-
-- 介绍:Adam即Adaptive Moment Estimation,是能够自适应时刻的估计方法,能够针对每个参数,计算自适应学习率。这是一种综合性的优化方法,在机器学习实际训练中,往往能够取得不错的效果。
-
-Adam=adagrad(用于处理稀疏的梯度)+RMSPro(处理非常态数据)
-
-- 流程:
-
-1. 首先计算一阶动量
-
-$$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t $$
-
-2. 类似AdaDelta和RMSProp计算二阶动量
-
-$$v_{t,i}=\beta_2 v_{t-1,i}+(1-\beta_2)g_{t,i}^2$$
-
-$$V_{t}=\operatorname{diag}\left(v_{t,1},v_{t,2},...,v_{t,d}\right)\in R^{d\times d}$$
-
-3. 分别加上指数加权移动平均值的修正因子
-
-$$
-\begin{aligned}
-\hat{m}_t &= \dfrac{m_t}{1 - \beta^t_1} \\
-\hat{v}_{t,i} &= \dfrac{v_{t,i}}{1 - \beta^t_2} \\
-\hat{V}_{t}&=\operatorname{diag}\left(\hat{v}_{t,1},\hat{v}_{t,2},...,\hat{v}_{t,d}\right)\in R^{d\times d}
-\end{aligned}
-$$
-
-所以,Adam的参数更新公式为
-
-$$\Delta\theta_{t}=-\frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}}\odot \hat{m}_t$$
-
-$$\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}}\odot \hat{m}_t$$
-
-- 问题:
- - 问题一、某些情况不收敛:由于Adam中的二阶动量非单调变化,导致Adam在训练后期容易出现学习率震荡,使得模型收敛不了【这也是为什么现在 SGD还被使用的原因】;
- - 问题二、有可能错过全局最优解。由于后期Adam学习率太低,影响其收敛;
-
-### 2.8 Nadam 是什么?
-
-- 介绍:Adam只是将Momentum和Adaptive集成了,但是没有将Nesterov集成进来,而Nadam则是在Adam的基础上将Nesterov集成了进来,也即Nadam = Nesterov + Adam。具体思想如下:由于NAG 的核心在于,计算当前时刻的梯度$g_t$时使用了「未来梯度」$\nabla J(\theta_t-\beta m_{t-1})$。NAdam 提出了一种公式变形的思路,大意可以这样理解:只要能在梯度计算中考虑到「未来因素」,就算是达到了 Nesterov 的效果。既然如此,我们就不一定非要在计算$g_t$时使用「未来因素」,可以考虑在其他地方使用「未来因素」。具体地,首先NAdam在Adam的基础上将$\hat{m}_t$展开
-
-$$
- \begin{aligned}
- \theta_{t+1}&=\theta_{t}-\frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}}\odot \hat{m}_t \\
- &= \theta_{t} - \frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}} \odot(\frac{\beta_1 m_{t-1}}{1 - \beta^t_1} + \dfrac{(1 - \beta_1) g_t}{1 - \beta^t_1}) \\
- \end{aligned}
-$$
-
-此时,如果我们将第$t-1$时刻的动量$m_{t-1}$用第$t$时刻的动量$m_{t}$近似代替的话,那么我们就引入了「未来因素」,所以将$m_{t-1}$替换成$m_{t}$即可得到Nadam的表达式
-
-$$
- \begin{aligned}
- \theta_{t+1}&= \theta_{t} - \frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}} \odot(\frac{\beta_1 m_{t}}{1 - \beta^t_1} + \dfrac{(1 - \beta_1) g_t}{1 - \beta^t_1}) \\
- &= \theta_{t} - \frac{\eta}{\sqrt{\hat{V}_{t}+\epsilon}} \odot(\beta_1\hat{m}_t+ \dfrac{(1 - \beta_1) g_t}{1 - \beta^t_1})
- \end{aligned}
-$$
-
-## 三、优化函数学霸笔记篇
-
-> 作者:言溪
-
-
-
-
-
-
-## 参考资料
-
-1. [一个框架看懂优化算法之异同 SGD/AdaGrad/Adam](https://zhuanlan.zhihu.com/p/32230623)
-2. [https://blog.csdn.net/u010089444/article/details/76725843](https://blog.csdn.net/u010089444/article/details/76725843)
-3. [优化算法之指数移动加权平均](https://zhuanlan.zhihu.com/p/32335746)
-
diff --git "a/BasicAlgorithm/\345\210\244\345\210\253\345\274\217vs\347\224\237\346\210\220\345\274\217.md" "b/BasicAlgorithm/\345\210\244\345\210\253\345\274\217vs\347\224\237\346\210\220\345\274\217.md"
deleted file mode 100644
index f614252..0000000
--- "a/BasicAlgorithm/\345\210\244\345\210\253\345\274\217vs\347\224\237\346\210\220\345\274\217.md"
+++ /dev/null
@@ -1,46 +0,0 @@
-# 【关于 判别式(discriminative)模型 vs. 生成式(generative)模型】 那些你不知道的事
-
-> 作者:杨夕
->
-> 项目地址:https://github.com/km1994/nlp_paper_study
->
-> 个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。
-
-
-
-
-## 一、判别式模型篇
-
-### 1.1 什么是判别式模型?
-
-判别模型是直接对P(Y|X)建模,就是说,直接根据X特征来对Y建模训练。
-
-### 1.2 判别式模型是思路是什么?
-
-1. 对P(Y|X)建模;
-2. 对所有的样本只构建一个模型,确认总体判别边界;
-3. 观测到输入什么特征,就预测最可能的label;
-
-### 1.3 判别式模型的优点是什么?
-
-对数据量要求没生成式的严格,速度也会快,小数据量下准确率也会好些。
-
-## 二、生成式模型篇
-
-### 2.1 什么是生成式模型?
-
-在模型训练中,我学习到的是X与Y的联合模型 P(X,Y) ,也就是说,我在训练阶段是只对 P(X,Y) 建模,我需要确定维护这个联合概率分布的所有的信息参数。完了之后在inference再对新的sample计算 P(Y|X) ,导出 Y,但这已经不属于建模阶段了。
-
-### 2.2 生成式模型是思路是什么?
-
-1. 1.对 P(X,Y) 建模;
-2. 这里我们主要讲分类问题,所以是要对每个label( yi)都需要建模,最终选择最优概率的label为结果,所以没有什么判别边界。(对于序列标注问题,那只需要构件一个model);
-3. 中间生成联合分布,并可生成采样数据。
-
-### 2.3 生成式模型的优点是什么?
-
-所包含的信息非常齐全,我称之为“上帝信息”,所以不仅可以用来输入label,还可以干其他的事情。生成式模型关注结果是如何产生的。
-
-### 2.4 生成式模型的缺点是什么?
-
-但是生成式模型需要非常充足的数据量以保证采样到了数据本来的面目,所以速度相比之下较慢。
\ No newline at end of file
diff --git "a/BasicAlgorithm/\345\275\222\344\270\200\345\214\226.md" "b/BasicAlgorithm/\345\275\222\344\270\200\345\214\226.md"
deleted file mode 100644
index 165aafa..0000000
--- "a/BasicAlgorithm/\345\275\222\344\270\200\345\214\226.md"
+++ /dev/null
@@ -1,54 +0,0 @@
-# 【关于 归一化】那些你不知道的事
-
-
-
-## 一、动机篇
-
-### 1.1 为什么要归一化?
-
-因为 每一列 数据的量纲不同,导致 数据分布区间存在差异。
-举例:(人的身高可以是 180cm,也可以是 1.8m,这两个虽然表示意义相同,但是由于单位的不同,导致 机器学习在计算过程中也容易出现差异,所以就需要对数据进行归一化)。
-
-## 二、介绍篇
-
-### 2.1 归一化有哪些方法?
-
-- 线性比例变换法:
-
-
-
-- 极差变换法:
-
-
-
-- 0 均值标准化(z-score 方法):
-
-
-
-### 2.2 归一化各方法特点?
-
-- 线性比例变换法 and 极差变换法
- - 特点:将原始数据线性化的方法转换到[0 1]的范围,该方法实现对原始数据的等比例缩放。通过利用变量取值的最大值和最小值(或者最大值)将原始数据转换为界于某一特定范围的数据,从而消除量纲和数量级影响,改变变量在分析中的权重来解决不同度量的问题。由于极值化方法在对变量无量纲化过程中仅仅与该变量的最大值和最小值这两个极端值有关,而与其他取值无关,这使得该方法在改变各变量权重时过分依赖两个极端取值。
-- 0 均值标准化(z-score 方法)
- - 特点:即每一变量值与其平均值之差除以该变量的标准差。虽然该方法在无量纲化过程中利用了所有的数据信息,但是该方法在无量纲化后不仅使得转换后的各变量均值相同,且标准差也相同,即无量纲化的同时还消除了各变量在变异程度上的差异,从而转换后的各变量在聚类分析中的重要性程度是同等看待的。而实际分析中,经常根据各变量在不同单位间取值的差异程度大小来决定其在分析中的重要性程度,差异程度大的其分析权重也相对较大。
-
-### 2.3 归一化 的 意义?
-
-每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。
-
-## 三、应用篇
-
-### 3.1 哪些机器学习算法 需要做 归一化?
-
-- 机器学习算法算法:
- - 基于距离计算的模型:KNN;
- - 通过梯度下降法求解的模型:线性回归、逻辑回归、支持向量机、神经网络
-
-### 3.2 哪些机器学习算法 不需要做 归一化?
-
-- 机器学习算法算法:
- - 树形模型:决策树、随机森林(Random Forest)
-- 为什么:
- - 原因1:因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率;
- - 原因2:因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。
-
diff --git "a/BasicAlgorithm/\346\255\243\345\210\231\345\214\226.md" "b/BasicAlgorithm/\346\255\243\345\210\231\345\214\226.md"
deleted file mode 100644
index 1f46043..0000000
--- "a/BasicAlgorithm/\346\255\243\345\210\231\345\214\226.md"
+++ /dev/null
@@ -1,178 +0,0 @@
-# 【关于 正则化】那些你不知道的事
-
-
-
-## 一、L0,L1,L2正则化 篇
-
-### 1.1 正则化 是什么?
-
-我们所说的正则化,就是在原来的loss function的基础上,加上了一些正则化项或者称为模型复杂度惩罚项。
-
-### 1.2 什么是 L0 正则化 ?
-
-- 介绍:指向量中非零元素的个数,希望参数中大部分元素为0,希望参数是稀疏的;
-
-- 公式:$\sum_{j=1, \theta_{j} \neq 0}^{m} \theta_{j}^{0}$
-- 直观理解:即将所有的非零项都作为1加起来,然后再用步长$\lambda$调节。意思很明显,每一个对预测产生了贡献的参数,我都惩罚一次,不多不少,大家都一样。
-
-> 就像一个法官判决,你偷了一毛钱,他杀了一个人,法官均以“价值观不正确”为由,把你们判一样的罪……只有一点都没参与的人,才不会被判刑。
-
-- 缺点:难以优化(存在NP难问题)
-
-### 1.3 什么是 L1 (稀疏规则算子 Lasso regularization)正则化 ?
-
-- 介绍:指向量中各元素绝对值之和,是 L0 正则项的最优凸近似;
-- 公式:
-
-$\sum_{j=1}^{m}\left|\theta_{j}\right|$
-
-- 直观理解:即将所有的绝对值值相加。
-
-> 拿法官举例子,就是,法官要按照你们的罪行量刑判罪,但是都得判,无论你影响最终是好是坏(比如你杀了个人,这个人也是个坏人,但是你还是犯了杀人罪得判刑)都按照罪行判罪。于是就都取个绝对值,表示都判,然后按照罪行大小判罪了……
-
-- 优点:
- - 比 L0 容易优化求解,L0存在NP难问题,所以 使用 较多;
- - L1范数是L0范数的最优凸近似;
-- 参数稀疏 的 优点:
- - 特征选择:通过将无用特征所对应的权重设为0,以去除无用特征;
- - 可解释性:因为无用特征的权重对应权重都为0,所以只需要介绍权重不为 0 的特征;
-
-### 1.4 什么是 L2 正则化(岭回归 Ridge Regression 或者 权重衰减 Weight Decay)正则化 ?
-
-- 介绍:向量各元素的平方和然后求平方根,防止模型出现过拟合的问题
-- 公式:
-
-$\sum_{j=1}^{m} \theta_{j}^{2}$
-
-- 直观理解:所有项目的平方和相加最后开根
-- 作用:防止过拟合问题
-- 优点:
- - 防止过拟合,提升模型的泛化能力;
- - 有助于处理 condition number 不好的情况下矩阵求逆很困难的问题。
-
-## 二、对比篇
-
-### 2.1 什么是结构风险最小化?
-
-在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,以此提高泛化预测精度。
-
-下面是一个图像解释(假设X为一个二维样本,那么要求解参数$w$也是二维):
-
-- 原函数曲线等高线(同颜色曲线上,每一组$w_1,w_2$带入值都相同)
-
-
-
-
-### 2.2 从结构风险最小化的角度理解L1和L2正则化
-
-- L1和L2加入后的函数图像:
-
- 
-
-从上面两幅图中我们可以看出:
-
-- 如果不加L1和L2正则化的时候,对于线性回归这种目标函数凸函数的话,我们最终的结果就是最里边的紫色的小圈圈等高线上的点。
-
-- 当加入L1正则化的时候,我们先画出以下函数的图像:
-
- $$
- \left|\omega_{1}\right|+\left|\omega_{2}\right|=F
- $$
-
- 该图像也就是一个菱形,代表这些曲线上的点算出来的1范数 $\left|\omega_{1}\right|+\left|\omega_{2}\right|$ 都为F,那我们现在的目标是不仅是原曲线算得值要小(越来越接近中心的紫色圈圈),还要使得这个菱形越小越好(F越小越好)。那么还和原来一样的话,过中心紫色圈圈的那个菱形明显很大,因此我们要取到一个恰好的值。那么如何求值呢?
-
- 
-
- 1. 以同一条原曲线目标等高线来说,现在以最外圈的红色等高线为例,我们看到,对于红色曲线上的每个点都可以做一个菱形,根据上图可知,当这个菱形与某条等高线相切(仅有一个交点)的时候,这个菱形最小。用公式说这个时候能使得在相同的$1 / N * \sum_{i=1}^{N}\left(y_{i}-\omega^{T} x_{i}\right)^{2}$下,由于相切的时候的$C\|\omega\|_{1}$,即$\left|\omega_{1}\right|+\left|\omega_{2}\right|$小,所以:能够使得$1 / N * \sum_{i=1}^{N}\left(y_{i}-\omega^{T} x_{i}\right)^{2}+C\|\omega\|_{1}$更小。
-
- 2. 有了上述说明,我们可以看出,最终加入L1范数得到的解,一定是某个菱形和某条原函数等高线的切点。现在有个比较重要的结论来了,**我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度及其容易是0,比如上图最终解是**
- $$
- \omega=(0, x)
- $$
- **这也就是我们所说的L1更容易得到稀疏解(解向量中0比较多)的原因。**
-
- 3. 当然了,光看着图说,L1的菱形更容易和等高线相交在坐标轴,一点都没说服力,只是个感性的认识,不过不要紧,其实是很严谨的,我们直接用求导来证明,具体的证明这里有一个很好的答案了,简而言之就是假设现在我们是一维的情况下
-
- $$
- h(\omega)=f(\omega)+C|\omega|
- $$
-
- 其中$ h(\omega) $是目标函数,$f(\omega)$是没加L1正则化的目标函数,$C|\omega|$是L1正则项,那么要使得0点成为最值的可能得点,,虽然在0点不可导,但是我们只需要让0点左右的导数异号,即
-
- $$
- h_{\mathrm{左}}^{\prime}(0) * h_{\mathrm{右}}^{\prime}(0)=\left(f^{\prime}(0)+C\right) \quad\left(f^{\prime}(0)-C\right)<0
- $$
-
- 也就是$C>\left|f^{\prime}(0)\right|$的情况下,0点都是可能得最值点。
-
-- 当加入L2正则化的时候,分析和L1正则化是类似的,也就是说我们仅仅是从菱形变成了圆形而已,同样还是求原曲线和圆形的切点作为最终解。当然与L1范数比,我们这样求的L2范数的**从图上来看,不容易交在坐标轴上,但是仍然比较靠近坐标轴**。**因此这也就是我们老说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0)。**
-
-综上所述,我们可以看见,加入正则化项,在最小化经验误差的情况下,可以让我们选择解更简单(趋向于0)的解。
-
-### 2.3 L1 vs L2
-
-
-
- |
- L1 |
- L2 |
-
-
- | 目标 |
- 绝对值最小化 |
- 平方值最小化 |
-
-
- | 下降速度 |
- 以绝对值函数方式下降,较快 |
- 以二次函数函数方式下降,较慢 |
-
-
- | 规则化的代价函数 |
- 图 1 |
- 图 2 |
-
-
- | 最优解是 w1 和 w2 的取值 |
- L1在和每个坐标轴相交的地方都有“角”出现,而目标函数的测地线除非位置摆得非常好,大部分时候都会在角的地方相交。注意到在角的位置就会产生稀疏性,例如图中的相交点就有w1=0,而更高维的时候(想象一下三维的L1-ball 是什么样的?)除了角点以外,还有很多边的轮廓也是既有很大的概率成为第一次相交的地方,又会产生稀疏性 |
- 因为没有角,所以第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么L1-regularization 能产生稀疏性,而L2-regularization 不行的原因了 |
-
-
- | 总结 |
- L1 会趋向于产生少量的特征,而其他的特征都是0 |
- L2 会选择更多的特征,这些特征都会接近于0 |
-
-
- | 特点 |
- Lasso在特征选择时候非常有用 |
- Ridge就只是一种规则化而已 |
-
-
- | 使用选择方面 |
- 特征多,但是其作用的特征少的情况【自动选择特征】 |
- 特征中起作用的特征多的情况 |
-
-
- | 分布类型 |
- 拉普拉斯分布 |
- 高斯分布 |
-
-
-
-## 三、dropout 篇
-
-### 3.1 什么是 dropout?
-
-- 方式:通过以概率p主动临时性地忽略掉神经网站中的部分隐藏节点来防止过拟合,即让这些神经元以一定概率不工作;
-
-
-
-### 3.2 dropout 在训练和测试过程中如何操作?
-
-- 训练过程:在**训练**开始时,随机删除一些隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层的神经元个数不变,按照反向传播学习算法对神经网络中的参数进行学习更新(被删除的节点不参与更新)。在这个“残缺”的网络中,让神经网络学习数据中的局部特征(即部分分布式特征)。在多个“残缺”之网(相当于多个简单网络)中实施特征,总要比仅在单个健全网络上进行特征学习,其泛化能力来得更加健壮。这里的“泛化”,实际上就是适应各种情况的能力。如果神经网络仅仅在训练集合上表现好(好比“窝里横”),而在应对其他新情况表现不佳,就表明陷入“过拟合”状态,其实就是泛化能力差。
-- 在**测试**阶段,将参与学习的节点和那些被隐藏的节点以一定的概率p加权求和,综合计算得到网络的输出。对于这样的“分分合合”的学习过程,有学者认为,“丢弃学习”可视为一种集成学习(Ensemble Learning)。
-
-### 3.3 dropout 如何防止过拟合?
-
-1. 先回到正常的模型(没有dropout),我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。(例如 3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
-2. dropout减少神经元之间复杂的共适应关系:因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式,提升模型鲁棒性,从这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高)
\ No newline at end of file
diff --git "a/BasicAlgorithm/\346\277\200\346\264\273\345\207\275\346\225\260.md" "b/BasicAlgorithm/\346\277\200\346\264\273\345\207\275\346\225\260.md"
deleted file mode 100644
index 460953f..0000000
--- "a/BasicAlgorithm/\346\277\200\346\264\273\345\207\275\346\225\260.md"
+++ /dev/null
@@ -1,91 +0,0 @@
-# 【关于 激活函数】那些你不知道的事
-
-
-
-## 一、动机篇
-
-### 1.1 为什么要有激活函数?
-
-1. 数据角度:由于数据是线性不可分的,如果采用线性化,那么需要复杂的线性组合去逼近问题,因此需要非线性变换对数据分布进行重新映射;
-2. 线性模型的表达力问题:由于线性模型的表达能力不够,引入激活函数添加非线性因素
-
-## 二、激活函数介绍篇
-
-### 2.1 sigmoid 函数篇
-
-#### 2.1.1 什么是 sigmoid 函数?
-
-- 公式
-
-$$\sigma(x)=\frac {1}{1+e^{-x}}$$
-
-- 图像
-
-
-
-#### 2.1.2 为什么选 sigmoid 函数 作为激活函数?
-
-sigmoid 函数 能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
-
-#### 2.1.3 sigmoid 函数 有什么缺点?
-
-1. 如果我们初始化神经网络的权值为[0,1]之间的随机数,由反向传播算法的数学推导可以知道,梯度从后向前传播时,每传递一层梯度值都会下降为原来原来的0.25倍,如果神经网络层比较多是时,那么梯度会穿过多层之后变得接近于0,也就出现梯度消失问题,当权值初始化为 [1,+]期间内的值时,则会出现梯度爆炸问题;
-
-
-
-2. output 不是0均值(即zero-centered);
- 1. 后果:会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:x>0, f=wTx+b那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果;
-3. 幂函数耗时;
-
-### 2.2 tanh 函数篇
-
-#### 2.2.1 什么是 tanh 函数?
-
-- 公式:
-
-$$tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}$$
-
-- 图像
-
-
-
-#### 2.2.2 为什么选 tanh 函数 作为激活函数?
-
-tanh 函数 能够 解决 sigmoid 函数 非 0 均值 问题
-
-#### 2.2.3 tanh 函数 有什么缺点?
-
-1. 梯度爆炸和梯度消失;
-2. 幂函数耗时;
-
-### 2.3 relu 函数篇
-
-#### 2.3.1 什么是 relu 函数?
-
-- 公式
-
-$$f(x)=max(0, x)$$
-
-- 图像
-
-
-
-#### 2.3.2 为什么选 relu 函数 作为激活函数?
-
-1. 解决了gradient vanishing问题 (在正区间)
-2. 计算速度非常快,只需要判断输入是否大于0
-3. 收敛速度远快于sigmoid和tanh
-
-#### 2.3.3 relu 函数 有什么缺点?
-
-1. ReLU的输出不是zero-centered;
-2. Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新;
-
-## 三、激活函数选择篇
-
-1. 深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度;
-2. 如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout;
-3. 最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
-
-
-
diff --git "a/BasicAlgorithm/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.md" "b/BasicAlgorithm/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.md"
deleted file mode 100644
index f55f64c..0000000
--- "a/BasicAlgorithm/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.md"
+++ /dev/null
@@ -1,59 +0,0 @@
-# 【关于 过拟合和欠拟合】那些你不知道的事
-
-
-
-## 一、过拟合和欠拟合 是什么?
-
-
-
-欠拟合和过拟合属于对立情况,都是导致模型泛化能力不高的两种常见原因,均是模型学习能力和数据复杂性失调的表现
-
-## 二、过拟合/高方差(overfiting / high variance)篇
-
-### 2.1 过拟合是什么及检验方法?
-
-- 问题表现方式:高方差
- - 如果 训练集 和 测试集 的 误差间 呈现较大的差异时,即为高方差;
- - 在 高方差 时,训练集 训练效果很好, 但是 验证集 的验证效果很差的时候, 即 训练集 和 验证集 呈现出 较大的差异,即模型的泛化能力差。这种现象 称为 过拟合;
-- 检验方法:此时,观察模型在训练集和测试集上的损失函数值随着epoch的变化情况,当 模型 在 测试集 上的 损失函数值 出现 先下降后上升,那么此时可能出现过拟合。
-
-### 2.2 导致过拟合的原因是什么?
-
-1. 训练集数量不足,样本类型单一。例如:如果 我们 利用 只包含 负样本的训练集 训练 模型,然后利用训练好的模型 预测 验证集中 的 正样本时,此时就会出现,模型 在 训练的时候,效果特别好,但是在验证的时候效果下降问题。因此,在选取训练集时,应当覆盖所有的数据类型;
-2. 训练集中存在噪声。噪声指的是 训练数据中 的 干扰数据,噪声数据 会 误导模型 记录 较多 的 错误特征,而 忽略了 真实样本 中 的正确特征信息;
-3. 模型复杂度过高。当模型过于复杂时,会导致 模型 **过于充分** 的 学习到 训练数据集中特征信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的数据都有稳定的输出。模型太复杂是过拟合的重要因素。
-
-### 2.3 过拟合的解决方法是什么?
-
-1. 标注不同类型的样本,是 样本尽可能的均衡。数据经过清洗之后再进行模型训练,防止噪声数据干扰模型;
-2. 降低训练模型复杂度。在训练和建立模型的时候,从相对简单的模型开始,不要一开始就把特征做的非常多,模型参数挑的非常复杂;
-3. 正则化。在模型算法中添加惩罚函数来防止模型出现过拟合问题。常见的有L1,L2,dropout 正则化等。而且 L1正则还可以自动进行特征选择;
-4. 采用 bagging(如随机森林等)集成学习方法 来 防止过拟合;
-5. 减少特征个数(不是太推荐,但也是一种方法)。可以使用特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
-6. 交叉检验。利用 交叉检验的方法,来让模型得到充分的训练,以得到较优的模型参数;
-7. 早停策略。本质上是交叉验证策略,选择合适的训练次数,避免训练的网络过度拟合训练数据;
-8. DropOut策略。核心思想就是bagging,可以看作是低成本的集成学习。所谓的Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。 在对训练集中的一批数据进行训练时,我们随机去掉一部分隐藏层的神经元,并用去掉隐藏层的神经元的网络来拟合我们的一批训练数据。使用基于dropout的正则化比基于bagging的正则化简单,这显而易见,当然天下没有免费的午餐,由于dropout会将原始数据分批迭代,因此原始数据集最好较大,否则模型可能会欠拟合。
-
-## 三、欠拟合/高偏差(underfiting / high bias)篇
-
-### 3.1 欠拟合是什么及检验方法?
-
-- 问题表现:高偏差
- - 如果 训练集 和 测试集 的 误差 收敛 但是收敛值 很高时,即为高偏差;
- - 虽然 训练集 和 测试集 都可以收敛,但是偏差很高,训练集和验证集的准确率都很低,这种现象 称为 欠拟合;
-- 检验方法:模型 无法很好的拟合数据,导致 训练集和测试集效果都不佳。
-
-### 3.2 导致欠拟合的原因是什么?
-
-- 原因:模型没有 充分 学习到 数据中的特征信息,使得 模型 无法很好地拟合数据
-
-### 3.3 欠拟合的解决方法是什么?
-
-1. 特征工程。添加更多的特征项,eg:特征组合、高次特征 等,来增大假设空间;
-2. 集成学习方法。 boosting(如GBDT)能有效解决 high bias;
-3. 提高 模型复杂度。当 所采用的模型比较简单,不能够应对复杂的任务。可以考虑 提升 模型复杂度,选用复杂度更好、学习能力更强的模型。比如说可以使用 SVM 的核函数,增加了模型复杂度,把低维不可分的数据映射到高维空间,就可以线性可分,减小欠拟合;
-4. 减小正则化系数。
-
-## 参考资料
-
-1. [为什么PCA不被推荐用来避免过拟合?](https://www.zhihu.com/question/47121788)
diff --git "a/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200805232522.png" "b/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200805232522.png"
deleted file mode 100644
index 88379fc..0000000
Binary files "a/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200805232522.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203235123.png" "b/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203235123.png"
deleted file mode 100644
index e5ba48e..0000000
Binary files "a/DeepLearningAlgorithm/adversarial_training_study/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203235123.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/adversarial_training_study/readme.md b/DeepLearningAlgorithm/adversarial_training_study/readme.md
deleted file mode 100644
index 823957b..0000000
--- a/DeepLearningAlgorithm/adversarial_training_study/readme.md
+++ /dev/null
@@ -1,148 +0,0 @@
-# 【关于生成对抗网络GAN】那些你不知道的事
-
-> 作者:杨夕
->
-> 项目地址:https://github.com/km1994/nlp_paper_study
->
-> 个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。
-
-
-
-## 一、动机
-
-之前我们提到[玻尔兹曼机(Boltzmann machine)](https://note.wiz.cn/web?dc=677f1e8f-ec8c-43eb-b0dc-fd5a17721384&cmd=kw%2C&kb=cc2cc09f-709e-444d-ab2f-da6218b57dd2),波尔茨曼机作为一种基于能量函数的概率模型,因为能量函数比较复杂,所以存在较多的限制。虽然受限玻尔兹曼机(Restricted Boltzmann machine) 针对该问题,对能量函数进行进一步简化,即假设网络中仅有隐藏变量与观察变量的连接,而观察变量将没有连接,隐藏变量间也没有连接,且隐藏变量可用 $n_h$ 个二进制随机变量表示,但是仍然存在限制问题。同时,该过程应用了马尔科夫链,导致计算成本较高。针对上述问题,Ian Goodfellow 于 2014 年提出了[生成对抗网络(Generative Adversarial Network,GAN)模型](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1406.2661.pdf),GAN 作为一类在无监督学习中使用的神经网络,有效地避免了马尔科夫链以及减低了波尔茨曼机所存在的限制问题,以至于在按文本生成图像、提高图片分辨率、药物匹配、检索特定模式的图片等任务中 GAN 的研究如火如荼。大牛Yann LeCun甚至评价GAN为 “adversarial training is the coolest thing since sliced bread”。
-
-本文将通过一个简单的例子(发论文问题)向读者深入浅出的介绍 GAN 原理及其应用。
-
-## 二、介绍篇
-
-### 2.1 GAN 的基本思想
-
-作为生成模型中的一种,生成对抗网络(Generative Adversarial Network,GAN)模型的训练过程可以被视为两个网络互相博弈的过程。下面我们将举一个简单的例子解释 GAN 的基本思想。
-
-> 假设你是一门研究生,你想尽快地将实验结果写成一篇论文发表。
-> 于是在每一次做完实验并写完初稿之后,都会跟你的导师进行沟通:
->
-> 你:boss,我实验结果出来,我想发论文
->
-> 导师:(瞄了瞄你的实验结果之后) ... 算了吧
->
-> (你通过跟其他论文的实验结果进行比较,发现自己的实验结果还偏低,于是,你又调整了实验参数,重新进行实验)
->
-> 你:boss,我实验结果提高了,我想发论文
->
-> 导师:... (瞄了瞄你的论文初稿之后)嗯 还有所欠缺
->
-> (你通过跟其他论文进行比较,发现自己写的论文初稿在表达方面还有所不足)
->
-> ...
->
-> 你:boss,我想发论文
->
-> 导师:... (仔细看了看你的论文之后)嗯 可以试一试
->
-> (通过这样不断的修改和被拒绝,你的论文最终获得了导师的赞赏与肯定)
-
-通过上面的例子,大家应该对 GAN 的思想有一个比较感性的认识了吧,下面我们可以进一步对 GAN 的基本结构和思想进行介绍。
-
-### 2.2 GAN 基本介绍
-
-#### 2.2.1 GAN 的基本结构
-
-GAN 的主要结构包括一个生成器 G(Generator)和一个判别器 D(Discriminator)。
-
-在上面的例子中,研究生相对于生成器。在一开始的时候,他只是一个什么都不懂的初学者,为了能让该研究生发出好的 paper,需要给他裴蓓一个导师来指导他做实验写论文,并告诉他 paper 面前的质量,通过反复的修改和被拒绝,paper 最终达到了可以投稿的标准,而这个导师就相当于生成对抗网络 GAN 中的判别器。
-
-#### 2.2.2 GAN 的基本思想
-
-生成对抗网络 GAN 主要包含两个模块:生成器 G(Generator)和一个判别器 D(Discriminator)。生成对抗网络 GAN 中所描述的对抗,其实就是指生成网络与判别网络之间的相互对抗。以下图为例:
-
-
-
-生成器模型(上图中蓝色部分 Generator)的主要工作就是学习真实图片集数据,从而使自己生成的图片更加接近与真实图片,以到达“以假乱真”,也就是“欺骗”判别器。
-
-判别器模型(上图中红色部分 Discriminator)的主要工作就是从图片集中找出生成器所生成的图片,并区分该图片与真实图片的差异,以进行真假判别。
-
-在整个迭代过程中,生成器不断的生成越来越逼真的图片,而判别器不断额努力鉴别出图片的真假。该过程可以视为两个网络互相博弈的过程,随着迭代次数的增加,最终两者将会趋于平衡,也就是说生成器能够生成出和真实图片一模一样的的图片,而判别器已经很难从图片集中辨别出生成器所生成的假图片了。也就是说,对于图片集中的每一张图片,判别器都给出接近 0.5 的概率认为该图片是真实的。
-
-## 三、训练篇
-
-### 3.1 生成器介绍
-
-生成器模型的任务:首先需要将一个 $n$ 维向量输入生成器模型,然后输出一个图片像素大小的图片(这里,生成器模型可以是任意可以输出图片的模型,如全连接神经网络,反卷积神经网络等)。
-
-> 注:输入向量:携带输出的某些信息,这些信息可以是手写数字为数字几,手写的潦草程度等。由于这里我们对于输出数字的具体信息不做要求,只要求其能够最大程度与真实手写数字相似(能骗过判别器)即可。所以我们使用随机生成的向量来作为输入即可,这里面的随机输入最好是满足常见分布比如均值分布,高斯分布等。
-
-### 3.2 判别器介绍
-
-判别器模型的任务:主要能够辨别输入的图片的真假都可以作为判别器。
-
-### 3.3 训练过程
-
-前面分别介绍了生成器和判别器的任务,在这一节,我们将主要介绍生成对抗网络的训练过程,其基本流程如下:
-
-step 1: 初始化:对判别器 D 的参数 $\theta_d$ 和生成器 G 的参数 $\theta_g$;
-
-step 2: 生成器“伪造”生成样本:首先,从真实样本中采样 $m$ 个样本 $\left\{x^1, x^2, \ldots x^m\right\}$;然后,从先验分布噪声中采样 $m$ 个噪声样本 ${z^1, z^2, \ldots, z^m}$;接下去,利用生成器“伪造” $m$ 个新样本 $\left\{\tilde{\boldsymbol{x}}^1, \tilde{\boldsymbol{x}}^2, \ldots, \tilde{\boldsymbol{x}}^m\right\}$;最后,固定生成器 G。
-
-step 3:判别器“鉴别”生成样本:通过对判别器 D 进行训练,以让它尽可能准确的“鉴别”出生成样本。
-
-step 4: “欺骗”判别器:循环更新判别器 k 次之后,再利用较小的学习率来更新一次生成器的参数。使得判别器已经很难从样本集中辨别出生成器所生成的生成样本了。也就是说,对于样本集中的每一个样本,判别器都给出接近 0.5 的概率认为该样本是真实的。
-
-> 注:为什么是先训练判别器再训练生成器呢?
->
-> 以上面的导师和学生的例子吧,学生(生成器)要写出一篇好的 paper (生成样本),那么就需要有一个能够较好的区分好 paper (真实样本)和坏 paper (生成样本)的好导师(判别器)之后,才能指导学生(生成器)如何对 paper (生成样本)进行优化。
-
-### 3.4 训练所涉及相关理论基础
-
-前面已经对生成对抗网络进行介绍,接下去,我们将从理论基础方面介绍生成对抗网络的训练过程。
-
-首先,需要从优化目标函数开始介绍,其表达式如下所示:
-
-$$
-\min _{G} \max _D V(G, D)=\min _G \max _D \mathbb{E}_{x \sim p_{\text { data }}}[\log D(x)]+\mathbb{E}_{z \sim p_z}[\log (1-D(G(z))]
-$$
-
-对于判别式而言,其主要用于区别样本的真伪,所以可以视为是一个二分类问题,上式中所使用的 $V(G, D)$为二分类问题中常见的交叉熵损失。公式如下所示:
-
-$$
-H(p, q) :=-\sum_i p_i \log q_i
-$$
-
-> $p_i$ 和 $q_i$ 为真实的样本分布和生成器的生成分布。
-
-对于生成器 G 而言,为了尽可能欺骗 D,所以需要最大化生成样本的判别概率 $D(G(z))$,即最小化 $log(1-D(G(z)))$。
-
-> 注意:$log(D(x))$ 一项与生成器 G 无关,所以可以忽略。
-
-
-实际训练过程中,生成器和判别器采用交替训练的方式进行。因为对于生成器,其最小化为 $\max _{D} V(D, G)$,即最小化 $ V(D, G) $的最大值。所以为了保证 $ V(D, G) $ 取得最大值,需要对判别器迭代训练 $k$ 次,然后再训练一次生成器。
-
-当生成器 G 固定时,我们可以对 $V(D,G)$ 求导,求出最优判别器 $D*(x)$:
-
-$$
-D^{*}(x)=\frac{p_{g}(x)}{p_{g}(x)+p_{d a t a}(x)}
-$$
-
-把最优判别器代入上述目标函数,可以进一步求出在最优判别器下,生成器的目标函数等价于优化 $p_{d a t a}(x)$ , $p_{g}(x)$ 的 JS 散度(JSD, Jenson Shannon Divergence)。
-
-可以证明,当 G,D 二者的 capacity 足够时,模型会收敛,二者将达到纳什均衡。此时,$p_{d a t a}(x)$= $p_{g}(x)$,判别器不论是对于 $p_{d a t a}(x)$ 还是 $p_{g}(x)$ 中采样的样本,其预测概率均为 1/2,即生成样本与真实样本达到了难以区分的地步。
-
-
-通过上述min max的博弈过程,理想情况下会收敛于生成分布拟合于真实分布。
-
-
-## 四、总结
-
-本文首先,通过以一个学生发 paper 的 example 的方式引入了生成对抗网络;然后,并进一步介绍了生成对抗网络的框架和思想,中生成器和判别器;最后,通过介绍生成对抗网络的训练过程,以引入生成对抗网络的训练公式。
-
-
-## 参考资料
-
-1. [通俗理解生成对抗网络GAN](https://zhuanlan.zhihu.com/p/33752313)
-2. [白话生成对抗网络 GAN,50 行代码玩转 GAN 模型!【附源码】](https://juejin.im/post/5b5694c5e51d4534b8582b56)
-3. [万字综述之生成对抗网络(GAN)](https://juejin.im/entry/5c92f8f7f265da60ea145dc8)
-4. [生成对抗网络原理与应用:GAN如何使生活更美好](https://www.jiqizhixin.com/articles/2017-08-23-6)
-5. [玻尔兹曼机、生成随机网络与自回归网络——深度学习第二十章(二)](https://zhuanlan.zhihu.com/p/50745191)
-6. [生成对抗网络(GAN)相比传统训练方法有什么优势?](https://www.zhihu.com/question/56171002)
-7. [火热的生成对抗网络(GAN),你究竟好在哪里](https://bigquant.com/community/t/topic/127988)
diff --git a/DeepLearningAlgorithm/attention/img/20200916164600.png b/DeepLearningAlgorithm/attention/img/20200916164600.png
deleted file mode 100644
index 8e7090c..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916164600.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916170948.png b/DeepLearningAlgorithm/attention/img/20200916170948.png
deleted file mode 100644
index d361ddf..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916170948.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916171345.png b/DeepLearningAlgorithm/attention/img/20200916171345.png
deleted file mode 100644
index 5524d3e..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916171345.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916171708.png b/DeepLearningAlgorithm/attention/img/20200916171708.png
deleted file mode 100644
index 1ed6470..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916171708.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916172001.png b/DeepLearningAlgorithm/attention/img/20200916172001.png
deleted file mode 100644
index 51829bd..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916172001.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916172200.png b/DeepLearningAlgorithm/attention/img/20200916172200.png
deleted file mode 100644
index 7b33c28..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916172200.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916172542.png b/DeepLearningAlgorithm/attention/img/20200916172542.png
deleted file mode 100644
index a509150..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916172542.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916172726.png b/DeepLearningAlgorithm/attention/img/20200916172726.png
deleted file mode 100644
index d0504a6..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916172726.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916172920.png b/DeepLearningAlgorithm/attention/img/20200916172920.png
deleted file mode 100644
index b9f81bf..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916172920.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916182920.png b/DeepLearningAlgorithm/attention/img/20200916182920.png
deleted file mode 100644
index 87d9a5d..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916182920.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/img/20200916183221.png b/DeepLearningAlgorithm/attention/img/20200916183221.png
deleted file mode 100644
index 1a3bbc6..0000000
Binary files a/DeepLearningAlgorithm/attention/img/20200916183221.png and /dev/null differ
diff --git "a/DeepLearningAlgorithm/attention/img/\344\270\213\350\275\275.jfif" "b/DeepLearningAlgorithm/attention/img/\344\270\213\350\275\275.jfif"
deleted file mode 100644
index 3c4c361..0000000
Binary files "a/DeepLearningAlgorithm/attention/img/\344\270\213\350\275\275.jfif" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/attention/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203234353.png" "b/DeepLearningAlgorithm/attention/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203234353.png"
deleted file mode 100644
index 53625a1..0000000
Binary files "a/DeepLearningAlgorithm/attention/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203234353.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/attention/readme.md b/DeepLearningAlgorithm/attention/readme.md
deleted file mode 100644
index 410cc32..0000000
--- a/DeepLearningAlgorithm/attention/readme.md
+++ /dev/null
@@ -1,162 +0,0 @@
-# 【关于 Attention 】那些你不知道的事
-
-> 作者:杨夕
->
-> 项目地址:https://github.com/km1994/nlp_paper_study
->
-> 个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。
-
-
-
-## 一、seq2seq 篇
-
-### 1.1 seq2seq (Encoder-Decoder)是什么?
-
-- 介绍:seq2seq (Encoder-Decoder)将一个句子(图片)利用一个 Encoder 编码为一个 context,然后在利用一个 Decoder 将 context 解码为 另一个句子(图片)的过程 ;
-- 应用:
- - 在 Image Caption 的应用中 Encoder-Decoder 就是 CNN-RNN 的编码 - 解码框架;
- - 在神经网络机器翻译中 Encoder-Decoder 往往就是 LSTM-LSTM 的编码 - 解码框架,在机器翻译中也被叫做 [Sequence to Sequence learning](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)。
-
-
-
-### 1.2 seq2seq 中 的 Encoder 怎么样?
-
-- 目标:将 input 编码成一个固定长度 语义编码 context
-- context 作用:
- - 1、做为初始向量初始化 Decoder 的模型,做为 decoder 模型预测y1的初始向量;
- - 2、做为背景向量,指导y序列中每一个step的y的产出;
-- 步骤:
- - 1. 遍历输入的每一个Token(词),每个时刻的输入是上一个时刻的隐状态和输入
- - 2. 会有一个输出和新的隐状态。这个新的隐状态会作为下一个时刻的输入隐状态。每个时刻都有一个输出;
- - 3. 保留最后一个时刻的隐状态,认为它编码了整个句子的 语义编码 context,并把最后一个时刻的隐状态作为Decoder的初始隐状态;
-
-### 1.3 seq2seq 中 的 Decoder 怎么样?
-
-- 目标:将 语义编码 context 解码 为 一个 新的 output;
-- 步骤:
- - 1. 一开始的隐状态是Encoder最后时刻的隐状态,输入是特殊的;
- - 2. 使用RNN计算新的隐状态,并输出第一个词;
- - 3. 接着用新的隐状态和第一个词计算第二个词,直到decoder产生一个 EOS token, 那么便结束输出了;
-
-### 1.4 在 数学角度上 的 seq2seq ,你知道么?
-
-- 场景介绍:以 机器翻译 为例,给定 一个 句子集合对 (X 表示 一个 英文句子集合,Y 表示 一个 中文句子集合);
-
-
-
-- 目标:对于 X 中 的 xi,我们需要采用 seq2seq 框架 来 生成 Y 中对应 的 yi;
-- 步骤:
-
-1. 编码器 encoder:将 输入 句子集合 X 进行编码,也就是将 其 通过 非线性变换 转化为 中间语义编码 Context C
-
-
-
-2. 解码器 decoder:对中间语义编码 context 进行解码,根据句子 X 的中间语义编码 Context C 和之前已经生成的历史信息 y1,y2,...,yi-1 生成 当前时刻信息 yi
-
-
-
-### 1.5 seq2seq 存在 什么 问题?
-
-- **忽略了输入序列X的长度**:当输入句子长度很长,特别是比训练集中最初的句子长度还长时,模型的性能急剧下降;
-- **对输入序列X缺乏区分度**:输入X编码成一个固定的长度,对句子中每个词都赋予相同的权重,这样做没有区分度,往往是模型性能下降。
-
-## 二、Attention 篇
-
-### 2.1 什么是 Attention?
-
-- 通俗易懂介绍:注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制。例如人的视觉在处理一张图片时,会通过快速扫描全局图像,获得需要重点关注的目标区域,也就是注意力焦点。然后对这一区域投入更多的注意力资源,以获得更多所需要关注的目标的细节信息,并抑制其它无用信息。
-- **Attention 介绍**:帮助模型对输入的x每部分赋予不同的权重,抽取更重要的信息,使模型做出准确判断。同时,不会给模型计算与存储带来更大开销;
-
-### 2.2 为什么引入 Attention机制?
-
-根据通用近似定理,前馈网络和循环网络都有很强的能力。但为什么还要引入注意力机制呢?
-
-- 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
-- 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。
-
-### 2.3 Attention 有什么作用?
-
-- 让神经网络把 “ 注意力 ” 放在一部分输入上,即:区分输入的不同部分对输出的影响;
-- 从增强字 / 词的语义表示这一角度介绍
- - 一个字 / 词在一篇文本中表达的意思通常与它的上下文有关。光看 “ 鹄 ” 字,我们可能会觉得很陌生(甚至连读音是什幺都不记得吧),而看到它的上下文 “ 鸿鹄之志 ” 后,就对它立马熟悉了起来。因此,字 / 词的上下文信息有助于增强其语义表示。同时,上下文中的不同字 / 词对增强语义表示所起的作用往往不同。比如在上面这个例子中, “ 鸿 ” 字对理解 “ 鹄 ” 字的作用最大,而 “ 之 ” 字的作用则相对较小。为了有区分地利用上下文字信息增强目标字的语义表示,就可以用到 Attention 机制。
-
-### 2.4 Attention 流程是怎么样?
-
-#### 步骤一 执行encoder (与 seq2seq 一致)
-
-- 思路:将源数据依次输入Encoder,执行Encoder
-- 目标:将源序列的信息,编译成语义向量,供后续decoder使用
-
-
-
-#### 步骤二 计算对齐系数 a
-
-- 思路:在 decoder 的每个词,我们需要关注源序列的所有词和目标序列当前词的相关性大小,并输出相关(对齐)系数 a;
-- 步骤:
- - 1. 在decoder输出一个预测值前,都会针对encoder的所有step,计算一个score;
- - 2. 将score汇总向量化后,每个decoder step能获得一个维度为[step_len,1]的score向量;
- - 3. 计算出score后,很自然地按惯例使用softmax进行归一化,得到对齐向量a,维度也是[step_len,1];
-
-
-- 常用对齐函数:
-
-
-
-#### 步骤三 计算上下文语义向量 C
-
-- 思路:对齐系数 a 作为权重,对 encoder 每个 step 的 output 向量进行加权求和(对齐向量a点乘outputs矩阵),得到decoder当前 step 的上下文语义向量 c
-
-
-
-#### 步骤四 更新decoder状态
-
-- 思路:更新decoder状态,这个状态可以是h,也可以是 s
-
-
-
-#### 步骤五 计算输出预测词
-
-- 思路:做一个语义向量到目标词表的映射(如果attention用于分类模型,那就是做一个到各个分类的映射),然后再进行softmax就可以了
-
-
-
-### 2.5 Attention 的应用领域有哪些?
-
-随着 Attention 提出 开始,就被 广泛 应用于 各个领域。比如:自然语言处理,图片识别,语音识别等不同方向深度学习任务中。随着 【[Transformer](https://github.com/km1994/nlp_paper_study/tree/master/transformer_study/Transformer) 】的提出,Attention被 推向了圣坛。
-
-## 三、Attention 变体篇
-
-### 3.1 Soft Attention 是什么?
-
-Soft Attention:传统的 Attention 方法,是参数化的(Parameterization),因此可导,可以被嵌入到模型中去,直接训练。梯度可以经过Attention Mechanism模块,反向传播到模型其他部分。
-
-### 3.2 Hard Attention 是什么?
-
-Hard Attention:一个随机的过程。Hard Attention不会选择整个encoder的输出做为其输入,Hard Attention会依概率Si来采样输入端的隐状态一部分来进行计算,而不是整个encoder的隐状态。为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度。
-
-### 3.3 Global Attention 是什么?
-
-- Global Attention:传统的Attention model一样。所有的hidden state都被用于计算Context vector 的权重,即变长的对齐向量at,其长度等于encoder端输入句子的长度。
-
-
-
-### 3.4 Local Attention 是什么?
-
-- 动机:Global Attention 在做每一次 encoder 时,encoder 中的所有 hidden state 都需要参与到计算中,这种方法容易造成 计算开销增大,尤其是 句子偏长的时候。
-- 介绍:Local Attention 通过结合 Soft Attention 和 Hard Attention 的一种 Attention方法
-
-
-
-### 3.5 self-attention 是什么?
-
-- 核心思想:self-attention的结构在计算每个token时,总是会考虑整个序列其他token的表达;
-举例:“我爱中国”这个序列,在计算"我"这个词的时候,不但会考虑词本身的embedding,也同时会考虑其他词对这个词的影响
-
-> 注:具体内容可以参考 [self-attention 长怎么样?](https://github.com/km1994/nlp_paper_study/tree/master/DL_algorithm/transformer_study#self-attention-长怎么样)
-
-
-## 参考
-
-1. [【关于 Attention 】那些你不知道的事](https://github.com/km1994/nlp_paper_study/tree/master/DL_algorithm/Attention_study)
-2. [nlp中的Attention注意力机制+Transformer详解](https://zhuanlan.zhihu.com/p/53682800)
-3. [模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用](https://zhuanlan.zhihu.com/p/31547842)
\ No newline at end of file
diff --git a/DeepLearningAlgorithm/cnn/img/1610160500583.png b/DeepLearningAlgorithm/cnn/img/1610160500583.png
deleted file mode 100644
index 36e28d4..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/1610160500583.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/1610177872501.png b/DeepLearningAlgorithm/cnn/img/1610177872501.png
deleted file mode 100644
index dac4a6e..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/1610177872501.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20180404113714719.png b/DeepLearningAlgorithm/cnn/img/20180404113714719.png
deleted file mode 100644
index 214d398..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20180404113714719.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20180404135638186.png b/DeepLearningAlgorithm/cnn/img/20180404135638186.png
deleted file mode 100644
index ec7f811..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20180404135638186.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20180404150134375.png b/DeepLearningAlgorithm/cnn/img/20180404150134375.png
deleted file mode 100644
index cef86fe..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20180404150134375.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200812200223.png b/DeepLearningAlgorithm/cnn/img/20200812200223.png
deleted file mode 100644
index 0811a3d..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200812200223.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200812200551.png b/DeepLearningAlgorithm/cnn/img/20200812200551.png
deleted file mode 100644
index deb0248..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200812200551.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200812200740.png b/DeepLearningAlgorithm/cnn/img/20200812200740.png
deleted file mode 100644
index 525b625..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200812200740.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200812203815.png b/DeepLearningAlgorithm/cnn/img/20200812203815.png
deleted file mode 100644
index 9677ecd..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200812203815.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200812204613.png b/DeepLearningAlgorithm/cnn/img/20200812204613.png
deleted file mode 100644
index c762226..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200812204613.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200906192126.png b/DeepLearningAlgorithm/cnn/img/20200906192126.png
deleted file mode 100644
index c4d6678..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200906192126.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200906192221.png b/DeepLearningAlgorithm/cnn/img/20200906192221.png
deleted file mode 100644
index 21e2bba..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200906192221.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20200906192249.png b/DeepLearningAlgorithm/cnn/img/20200906192249.png
deleted file mode 100644
index 22b4175..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20200906192249.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223130440.png b/DeepLearningAlgorithm/cnn/img/20201223130440.png
deleted file mode 100644
index 5bfaa76..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223130440.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223130525.png b/DeepLearningAlgorithm/cnn/img/20201223130525.png
deleted file mode 100644
index 8074582..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223130525.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223131020.png b/DeepLearningAlgorithm/cnn/img/20201223131020.png
deleted file mode 100644
index 2fd2a58..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223131020.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223131344.png b/DeepLearningAlgorithm/cnn/img/20201223131344.png
deleted file mode 100644
index 6f004d0..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223131344.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223131446.png b/DeepLearningAlgorithm/cnn/img/20201223131446.png
deleted file mode 100644
index 7e25651..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223131446.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223131525.png b/DeepLearningAlgorithm/cnn/img/20201223131525.png
deleted file mode 100644
index 2343744..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223131525.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223132028.png b/DeepLearningAlgorithm/cnn/img/20201223132028.png
deleted file mode 100644
index 7e741af..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223132028.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223132145.png b/DeepLearningAlgorithm/cnn/img/20201223132145.png
deleted file mode 100644
index 41f6138..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223132145.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223132445.png b/DeepLearningAlgorithm/cnn/img/20201223132445.png
deleted file mode 100644
index d6db901..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223132445.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223132538.png b/DeepLearningAlgorithm/cnn/img/20201223132538.png
deleted file mode 100644
index bf7cf1b..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223132538.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223135451.png b/DeepLearningAlgorithm/cnn/img/20201223135451.png
deleted file mode 100644
index 4fc276b..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223135451.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223135552.png b/DeepLearningAlgorithm/cnn/img/20201223135552.png
deleted file mode 100644
index a66dd30..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223135552.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223135720.png b/DeepLearningAlgorithm/cnn/img/20201223135720.png
deleted file mode 100644
index 2b7dc59..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223135720.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223135807.png b/DeepLearningAlgorithm/cnn/img/20201223135807.png
deleted file mode 100644
index 5426781..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223135807.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223135855.png b/DeepLearningAlgorithm/cnn/img/20201223135855.png
deleted file mode 100644
index cba1f27..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223135855.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223140010.png b/DeepLearningAlgorithm/cnn/img/20201223140010.png
deleted file mode 100644
index 3098a3d..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223140010.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223140135.png b/DeepLearningAlgorithm/cnn/img/20201223140135.png
deleted file mode 100644
index e026375..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223140135.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223140211.png b/DeepLearningAlgorithm/cnn/img/20201223140211.png
deleted file mode 100644
index 00db714..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223140211.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20201223140304.png b/DeepLearningAlgorithm/cnn/img/20201223140304.png
deleted file mode 100644
index 717df5b..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20201223140304.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-19.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-19.png
deleted file mode 100644
index 8572051..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-19.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-50.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-50.png
deleted file mode 100644
index 5befe41..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-16-50.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-21-27.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-21-27.png
deleted file mode 100644
index 0efa4bf..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-21-27.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-22-53.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-22-53.png
deleted file mode 100644
index 07eb893..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-22-53.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-25-42.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-25-42.png
deleted file mode 100644
index 0f8aff3..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-25-42.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-29-17.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-29-17.png
deleted file mode 100644
index 4db5a05..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-29-17.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-30-53.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-30-53.png
deleted file mode 100644
index 4c5026b..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-30-53.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-37-37.png b/DeepLearningAlgorithm/cnn/img/2021-01-06-16-37-37.png
deleted file mode 100644
index 0c79822..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/2021-01-06-16-37-37.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20210105193358.png b/DeepLearningAlgorithm/cnn/img/20210105193358.png
deleted file mode 100644
index 584d774..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20210105193358.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/20210105193728.png b/DeepLearningAlgorithm/cnn/img/20210105193728.png
deleted file mode 100644
index 0d71437..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/20210105193728.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/68747470733a2f2f69322e6b6b6e6577732e63632f5349473d327374667567352f6374702d767a6e74722f713072306e36383872707337343832326f726e6e3538393538727172723472312e6a7067.gif b/DeepLearningAlgorithm/cnn/img/68747470733a2f2f69322e6b6b6e6577732e63632f5349473d327374667567352f6374702d767a6e74722f713072306e36383872707337343832326f726e6e3538393538727172723472312e6a7067.gif
deleted file mode 100644
index 7b22538..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/68747470733a2f2f69322e6b6b6e6577732e63632f5349473d327374667567352f6374702d767a6e74722f713072306e36383872707337343832326f726e6e3538393538727172723472312e6a7067.gif and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/DeepLearningAlgorithm/cnn/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 6a2c781..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/BatchNormvsLayerNorm.png b/DeepLearningAlgorithm/cnn/img/BatchNormvsLayerNorm.png
deleted file mode 100644
index 611891e..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/BatchNormvsLayerNorm.png and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/BatchNorm\346\223\215\344\275\234.png" "b/DeepLearningAlgorithm/cnn/img/BatchNorm\346\223\215\344\275\234.png"
deleted file mode 100644
index 82245b5..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/BatchNorm\346\223\215\344\275\234.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/CNN.png b/DeepLearningAlgorithm/cnn/img/CNN.png
deleted file mode 100644
index 2e96f24..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/CNN.png and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/DeepLearningAlgorithm/cnn/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 882606b..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/Normalization.png b/DeepLearningAlgorithm/cnn/img/Normalization.png
deleted file mode 100644
index bdda78e..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/Normalization.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/cnn-dilation-in_7_out_3.gif b/DeepLearningAlgorithm/cnn/img/cnn-dilation-in_7_out_3.gif
deleted file mode 100644
index 98158a6..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/cnn-dilation-in_7_out_3.gif and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/eec076b0b1aec804c74f1e9b726832a.jpg b/DeepLearningAlgorithm/cnn/img/eec076b0b1aec804c74f1e9b726832a.jpg
deleted file mode 100644
index 9d14672..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/eec076b0b1aec804c74f1e9b726832a.jpg and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/img/pr16808o61q24973o42q7rsqq88os391.jpg b/DeepLearningAlgorithm/cnn/img/pr16808o61q24973o42q7rsqq88os391.jpg
deleted file mode 100644
index a6aa05e..0000000
Binary files a/DeepLearningAlgorithm/cnn/img/pr16808o61q24973o42q7rsqq88os391.jpg and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" "b/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225.png"
deleted file mode 100644
index b126f64..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" "b/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg"
deleted file mode 100644
index 354bb07..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" "b/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg"
deleted file mode 100644
index f4d8010..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" "b/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png"
deleted file mode 100644
index 1df5ee5..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" "b/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png"
deleted file mode 100644
index a65a966..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" "b/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png"
deleted file mode 100644
index 881b3e2..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" "b/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png"
deleted file mode 100644
index 6c42db6..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233936.png" "b/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233936.png"
deleted file mode 100644
index b739653..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233936.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" "b/DeepLearningAlgorithm/cnn/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png"
deleted file mode 100644
index f7f5368..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\346\255\243\345\210\231\345\214\226.png" "b/DeepLearningAlgorithm/cnn/img/\346\255\243\345\210\231\345\214\226.png"
deleted file mode 100644
index ff8a910..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\346\255\243\345\210\231\345\214\226.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" "b/DeepLearningAlgorithm/cnn/img/\346\277\200\346\264\273\345\207\275\346\225\260.png"
deleted file mode 100644
index 0325d90..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" "b/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png"
deleted file mode 100644
index 8505602..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" "b/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png"
deleted file mode 100644
index 6e0246a..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" "b/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png"
deleted file mode 100644
index da180da..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" "b/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png"
deleted file mode 100644
index 201909f..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" "b/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png"
deleted file mode 100644
index 923e9db..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/cnn/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" "b/DeepLearningAlgorithm/cnn/img/\351\200\273\350\276\221\345\233\236\345\275\222.png"
deleted file mode 100644
index 8d1b1bb..0000000
Binary files "a/DeepLearningAlgorithm/cnn/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/cnn/readme.md b/DeepLearningAlgorithm/cnn/readme.md
deleted file mode 100644
index cc0892b..0000000
--- a/DeepLearningAlgorithm/cnn/readme.md
+++ /dev/null
@@ -1,257 +0,0 @@
-# 【关于 CNN】那些你不知道的事
-
-> 贡献者:天骄,小猪呼噜,沐风,杨夕,芙蕖,李玲
-
-
-
-## 一、动机篇
-
-- 全连接网络:任意一对输入与输出神经元间都存在连接,现成稠密结构
-- 局部特征存在相关性
-
-## 二、CNN 卷积层篇
-
-### 2.1 卷积层的本质是什么?
-
-- 稀疏交互
- - 动机:全连接网络,任意一对输入与输出神经元间都存在连接,现成稠密结构
- - 思路:卷积核尺度远小于输入维度,每个输出神经元仅与前一层特定局部区域内的神经元存在连接
- - 优点:全连接层的 参数 为 m*n;卷积层为 k*n (m为输入,n为输出,k 为 卷积维度)
-- 参数共享
- - 思路:在同一模型的不同模块中使用相同参数,为卷积运算的固有属性
- - 区别
- - NN:计算每层输出时,权值参数矩阵中每个元素只作用于每个输入元素一次
- - CNN:卷积核中每个元素将作用于每个局部输入的特定位置上
- - 物理意义:使卷积层具有平移不变性 (满足 f(g(x)) = g(f(x)) 时,称 f(x) 关于g 具有等变性)
-
-### 2.2 CNN 卷积层与全连接层的联系?
-
-1. 卷积核中的权值每次滑动计算时只是局部连接,且在卷积列中的神经元共享参数——计算局部信息,而全连接层神经元的权值与所有输入相连——计算全局信息。
-2. 两者都是采用的矩阵点积运算,具有相似的计算形式,能够实现互相转化。
- 1. **卷积——>全连接:** 权重矩阵参数增大,权重补0,由于参数共享性质,在其中大部分块中,存在大量相等参数。
- 2. **全连接——>全卷积:** 将卷积核的尺寸设置为和输入数据体的尺寸一致(NxWxHxC)。除第一层全连接外,其他通道数都为1,N表示本层神经元的个数,为一个提前设定的超参数,结果与初始的那个全连接层一致。
-3. 一个深度卷积神经网络模型通常由若干卷积层叠加若干全连接层组成,中间也包含各种非线性操作以及池化操作。卷积层的作用是从输入数据中采集关键数据内容。全连接层在深度卷积神经网络中的作用是将前面经过多次卷积后高度抽象的特征进行整合。最后一层作归一化,然后输出概率。卷积层提供了一个有意义、低维度且几乎不变的特征空间,然后全连接层在这个空间里学习一个非线性的方程。通俗的说,卷积层是特征提取器,全连接层执行分类操作。
-4. 全连接层可以视作一种特殊的卷积。考虑下面两种情况:
- 1. (1) 特征图和全连接层相连,AlexNet经过五次池化后得到7\*7\*512的特征图,下一层全连接连向4096个神经元,这个过程可以看作有4096个7\*7\*512的卷积核和7\*7\*512的特征图进行卷积操作,最终得到1\*1\*4096的特征图,等价于全连接得到4096个神经元。
- 2. (2) 全连接层和全连接层相连,AlexNet的再下一层依然是4096个神经元,即4096个神经元和4096个神经元全连接,由(1)得到了1\*1\*4096的特征图,本次全连接过程可以看作存在4096个1\*1\*4096的卷积核,依次和1\*1\*4096的特征图进行卷积操作,等价于全连接。
-
-### 2.3 channel的含义是什么?
-
-在卷积神经网络中,channel的含义是每个卷积层中卷积核的数量。卷积层的卷积个数就等于卷积层输出的out_channels。这个值也与下一层卷积的in_channels相同。下面举例说明。
-
-如下图,假设现有一个为 6×6×3 的图片样本,使用 3×3×3 的卷积核(filter)进行卷积操作。此时输入图片的 `channels` 为 3 ,而**卷积核中**的 `in_channels` 与 需要进行卷积操作的数据的 `channels` 一致(这里就是图片样本,为3)。
-
-
-
-接下来,进行卷积操作,卷积核中的27个数字与分别与样本对应相乘后,再进行求和,得到第一个结果。依次进行,最终得到 4×4的结果。
-
-
-
-上面步骤完成后,由于只有一个卷积核,所以最终得到的结果为 4×4×1, `out_channels` 为 1 。
-
-在实际应用中,都会使用多个卷积核。这里如果再加一个卷积核,就会得到 4×4×2 的结果。
-
-
-
-总结一下, `channels` 分为三种:
-
-1. 最初输入的图片样本的 `channels` ,取决于图片类型,比如RGB;
-2. 卷积操作完成后输出的 `out_channels` ,取决于卷积核的数量。此时的 `out_channels` 也会作为下一次卷积时的卷积核的 `in_channels`;
-3. 卷积核中的 `in_channels` ,就是上一次卷积的 `out_channels` ,如果是第一次做卷积,就是样本图片的 `channels` 。
-
-## 三、CNN 池化层篇
-
-### 3.1 池化层针对区域是什么?
-
-池化层针对区域是非重叠区域。
-
-### 3.2 池化层的种类有哪些?
-
-- 均值池化
- - 思路:对领域内特征值取平均
- - 优点:抑制由领域大小受限造成的估计值方差增大现象
- - 特点:对背景的保留效果好
-- 最大值池化
- - 思路:取领域内最大值
- - 优点:抑制网络参数误差造成估计均值偏移问题
- - 特点:更好提取纹理信息
-
-### 3.3 池化层的作用是什么?
-
-除降低参数量外,能够保持对平移、伸缩、旋转操作的不变性
-
-### 3.4 池化层 反向传播 是什么样的?
-
-- 动机:由于 Pooling 操作容易改变 feature map 的 尺寸大小,使得 Pooling 层不可导;
-- 举例说明:假定 2*2 的 池化,会生成 2*2*2*2 = 16 个梯度,即梯度无法传递到对应的位置;
-- 方法:将一个像素的loss (梯度) 传递给4个像素,且需要保证传递的 loss (梯度)总和不变。
-
-### 3.5 mean pooling 池化层 反向传播 是什么样的?
-
-- mean pooling 前向传播介绍:将 patch 中的值求平均来做 pooling;
-- mean pooling 反向传播介绍:将值的梯度均等分为 n*n 份 分配给上一层,以保证 池化 前后 梯度之和保存不变;
-
-
-
-### 3.6 max pooling 池化层 反向传播 是什么样的?
-
-- max pooling 前向传播介绍:将 patch 中的值取 max 来做 pooling 结果 传递给下一层;
-- max pooling 反向传播介绍:把梯度直接传给前一层 值最大的一个像素,而其他像素不接受梯度,也就是为0;
-
-
-
-## 四、CNN 整体篇
-
-### 4.1 CNN 的流程是什么?
-
-- s1 输入变长的字符串或单词串
-- s2 利用滑动窗口加池化的方式将原先的输入转化为固长的向量表示
-
-### 4.2 CNN 的特点是什么?
-
-CNN 能够捕获文本中的局部特征
-
-### 4.3 卷积神经网络为什么会具有平移不变性?
-
-平移不变性:即目标在空间内发生平移,但是结果(标签)不变
-
-平移不变性=卷积+最大池化。卷积层具有平移等变性,池化层具有平移不变性。**卷积神经网络的平移不变性,是池化层赋予的**。
-
-如果一个函数满足“输入改变,输出也以同样的方式进行改变”这一性质,我们就说该函数是**等变的**(equivariant)。形式化地,如果函数$f(x)$与$g(x)$满足$f(g(x))=g(f(x))$,我们就说$f(x)$对于变换$g$具有等变性。
-
-卷积层具有**平移等变性**,也就是说卷积层对平移是敏感的,输入的平移能等价地影响输出。直观地,如果把一张输入图像先平移后卷积,其结果与先卷积后平移效果是一样的。如果我们移动输入图像中的物体,它的表示也会在输出中移动同样的量。
-
-卷积层的**参数共享**(Parameter Sharing)特性使得卷积层具有平移等变性。参数共享是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,当计算一层的输出时,权重矩阵的每个元素只使用一次。当它乘以输入的一个元素后,就再也不会用到了。但是在卷积神经网络中,卷积核的每一个元素都作用在输入的每一个位置上。卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每个位置都需要学习一个单独的参数集合。
-
-如果一个函数满足“输入改变,输出不会受影响”这一性质,我们就说该函数是**不变的**(invariant)。形式化地,如果函数$f(x)$与$g(x)$满足$g(x)=x'$且$f(x)=f(x')=f(g(x))$,我们就说$f(x)$对于变换$g$具有不变性。
-
-池化层具有(近似)**平移不变性**,也就是说池化层对平移不敏感。不管采用什么样的池化函数,当输入做出少量平移时,池化能够帮助输入的表示近似不变。例如我们**使用最大池化,只要变换不影响到最大值,我们的池化结果不会收到影响**。对于一个卷积核来说,只有一个值的变动会影响到输出, 其他的变换都不会造成扰动。平均池化的近似不变性就稍弱些。
-
-局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。
-
-
-### 4.4 卷积神经网络中im2col是如何实现的?
-
-卷积的运算量十分巨大,如果将卷积运算转化为矩阵运算,便能利用GPU来提升性能。
-
-im2col全称image to column(从图像到矩阵),作用为加速卷积运算。即把包含批数量的4维数据转换成2维数据。也就是将输入数据降维,然后通过numpy的矩阵运算后得到结果,再将结果的形状还原,从而通过用矩阵运算来代替for循环语句。
-
-`im2col`将卷积核和卷积核扫过的区域都转化为列(行)向量。举个例子方便理解:
-
-假设一个3*3卷积核为:
-
-
-
-输入图像是5*5像素的单通道图像:
-
-
-
-卷积核会锁定3*3的滑动窗口:
-
-
-
-`im2col`会将每个滑动窗口内的像素转为列向量:
-
-
-
-就这样转化所有滑动窗口的列向量,将其拼接成9行的矩阵(行数与滑动窗口数目相关,列数则与卷积核大小相关):
-
-
-
-`im2col`还会将卷积核转化为行向量:
-
-
-
-最后使用卷积核行向量乘以滑动窗口元素组成的矩阵:
-
-
-
-得到1*9的列向量,将其拼接成特征图:
-
-
-
-### 4.5 CNN 的局限性是什么?
-
-1. 以CNN为代表的前馈神经网络使用了条件独立假设,其特征提取范围受到限制;而循环神经网络或者Attention机制的模型能够看到序列整体的信息,因此对于序列建模任务,单纯的CNN存在先天不足。
-2. 卷积神经网络的核心思想是捕捉局部特征。对于序列任务,比如文本来说,局部特征就是由若干单词组成的滑动窗口(类似N-Gram)。卷积神经网络的优势在于能够自动地对N-Gram特征进行组合和筛选,获得不同抽象层次的语义信息。
- 1. 解决方法:加入更多卷积层 -> 网络深度增加 -> 参数量增大 -> 容易过拟合 -> 引入 Dropout 正则化 -> 引入超参数 -> 网络庞大冗余,难以训练
-3. 使用CNN做序列任务的优点在于其共享权重的机制,使得训练速度相对较快;但是其最大的缺点在于CNN无法构建长距离依存关系。
-4. 有许多研究者试图改进CNN模型,使其能够应用于序列任务。诸如用于句子语义建模的动态卷积神经网络DCNN、可以在整个序列的所有窗口上进行卷积的时延神经网络TDNN等。
-
-## 五、Iterated Dilated CNN 篇
-
-### 5.1 什么是 Dilated CNN 空洞卷积?
-
-- 动机:
- - 正常CNN 的 filler 作用于输入矩阵连续位置,利用 卷积 和 池化 整合多尺度的上下文信息,导致分辨率损失
- - pooling 会损失信息,降低精度,不加则导致感受野变小,学不到全局信息
- - CNN提取特征的能力受到卷积核大小的限制,特别是对于序列问题,容易造成长距离依赖问题
-- 介绍:Dilated Convolutions,翻译为扩张卷积或空洞卷积。空洞卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率参数,主要用来表示扩张的大小,以及去掉 pooling。
-- 空洞卷积与普通卷积的相同点:卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。感受野指的是特征图上某个元素的计算受输入图像影响区域的范围,即特征图上神经元能够“看到”的图像范围,例如3×3卷积核的感受野大小为9。
-
-具体地,空洞卷积通过给卷积核插入“空洞”变相增加其大小。如果在卷积核的每两个元素之间插入$D-1$个空洞,该卷积核的有效大小为$K'=K+(K-1)\times (D-1)$。其中$K$为原始卷积核大小,$D$称为膨胀率(扩张率,dilation rate)。当$D=1$时卷积核为普通的卷积核。
-
-例如下图中
-
-- (a) 普通卷积,1-dilated convolution,卷积核的感受野为3×3=9。
-- (b) 空洞卷积,2-dilated convolution,卷积核的感受野为7×7=49。
-- (c) 空洞卷积,4-dilated convolution,卷积核的感受野为15×15=225。
-
-
-- 优点:dilated width 会随着层数增加而指数增加,层数 增加,参数量线性增长, 感受野 指数增加,可覆盖全部信息
-
-**例如卷积核大小为3,步长为1,膨胀率为2的空洞卷积动态示意图:**
-
-
-
-- 空洞卷积的作用
- - 扩大感受野。如果希望增加输出单元的感受野,一般可以通过增加卷积核大小、增加卷积层数,或在卷积前增加池化操作来实现。但是前两者会增加参数数目,第三种方式会损失信息。空洞卷积就是一种增加感受野的同时不增加参数数量的方法。
- - 捕获多尺度上下文信息:在进行空洞卷积前,通过双线性插值,对feature map进行上采样之后,再进行空洞卷积,这样可以在提高feature map的像素的同时,提取更多的全局信息
-
-### 5.2 什么是 Iterated Dilated CNN?
-
-- 思路:利用四个结构相同的 Dilated CNN 拼接起来,每个 block 里面 dilated width 为 1,1,2 的三层 DCNN,能够捕获更大感受野的信息
-
-## 六、反卷积 篇
-
-### 6.1 解释反卷积的原理和用途?
-
-**1.反卷积原理**
-
- 反卷积=上采样=(转置卷积+微步卷积)⊆ 空洞卷积=一般意义上的广义卷积(包含上采样和下采样)。
-
-上采样:在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.:图像的语义分割),这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。
-
-反卷积是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。
-
-反卷积又被称为Transposed(转置) Convolution,其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程。因为卷积层的前向反向计算分别为乘 $C$ 和 $C^T$,而反卷积层的前向反向计算分别为乘 $C^T$ 和 $(C^T)^T$,所以它们的前向传播和反向传播刚好交换过来。
-
-
-
-上图展示一个反卷积的工作过程,乍看一下好像反卷积和卷积的工作过程差不多,主要的区别在于反卷积输出图片的尺寸会大于输入图片的尺寸,通过增加padding来实现这一操作,上图展示的是一个strides(步长)为1的反卷积。下面看一个strides不为1的反卷积
-
-
-
-上图中的反卷积的stride为2,通过间隔插入padding来实现的。同样,可以根据反卷积的o、s、k、p参数来计算反卷积的输出i,也就是卷积的输入。公式如下:**i=(o−1)∗s+k−2∗p**。
-
-**2.作用**
-
-- 通过反卷积可以用来可视化卷积的过程
-
-- 反卷积在GAN等领域中有着大量的应用。 比如用GANs生成图片,其中的generator和discriminator均采用深度学习,generator生成图片过程中采用的就是反卷积操作(当然discriminator采用卷积对generator生成的图片判别真伪)。
-
-- 将一些低分辨率的图片转换为高分辨率的图片。
-
-参考:
-
-https://kknews.cc/code/zb2jr43.html
-
-https://zhuanlan.zhihu.com/p/48501100
-
-## 参考
-
-1. [理解为什么要将全连接层转化为卷积层](https://www.cnblogs.com/liuzhan709/p/9356960.html)
-2. [What do the fully connected layers do in CNNs?](https://stats.stackexchange.com/questions/182102/what-do-the-fully-connected-layers-do-in-cnns?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)
-3. [CNN全连接层和卷积层的转化](https://blog.csdn.net/weixin_43199584/article/details/105125620)
-4. [【CNN】理解卷积神经网络中的通道 channel](https://blog.csdn.net/sscc_learning/article/details/79814146)
-5. [万字长文概述NLP中的深度学习技术](https://www.linkresearcher.com/information/6c7a15b5-236a-40f3-879f-af2ac06c2557)
\ No newline at end of file
diff --git a/DeepLearningAlgorithm/readme.md b/DeepLearningAlgorithm/readme.md
deleted file mode 100644
index e69de29..0000000
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124195411.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124195411.png"
deleted file mode 100644
index 97dc325..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124195411.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124200244.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124200244.png"
deleted file mode 100644
index 06f8931..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124200244.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201238.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201238.png"
deleted file mode 100644
index cdbc088..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201238.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201611.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201611.png"
deleted file mode 100644
index ea21528..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201611.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201807.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201807.png"
deleted file mode 100644
index d05325a..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124201807.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203442.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203442.png"
deleted file mode 100644
index 59de51f..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203442.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203639.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203639.png"
deleted file mode 100644
index 63a34e0..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203639.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203827.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203827.png"
deleted file mode 100644
index 182db15..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124203827.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204437.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204437.png"
deleted file mode 100644
index 8d9f2bc..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204437.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204901.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204901.png"
deleted file mode 100644
index 4c7b56b..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204901.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204920.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204920.png"
deleted file mode 100644
index 24f92ea..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124204920.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205049.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205049.png"
deleted file mode 100644
index 8889eab..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205049.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205104.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205104.png"
deleted file mode 100644
index bb473e1..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205104.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205209.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205209.png"
deleted file mode 100644
index b7a0886..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205209.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205226.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205226.png"
deleted file mode 100644
index b03820a..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205226.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205311.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205311.png"
deleted file mode 100644
index 6a5805a..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205311.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205329.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205329.png"
deleted file mode 100644
index 23022a6..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205329.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205501.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205501.png"
deleted file mode 100644
index ef8c6ed..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205501.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205517.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205517.png"
deleted file mode 100644
index e1ac66f..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205517.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205549.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205549.png"
deleted file mode 100644
index cb95257..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205549.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205602.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205602.png"
deleted file mode 100644
index 4fe8e33..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220124205602.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161534.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161534.png"
deleted file mode 100644
index d4d83e3..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161534.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161629.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161629.png"
deleted file mode 100644
index e619895..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125161629.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162246.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162246.png"
deleted file mode 100644
index 77e8ced..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162246.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162329.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162329.png"
deleted file mode 100644
index 6b4c2b2..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162329.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162404.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162404.png"
deleted file mode 100644
index 6a32ff5..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162404.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162415.png" "b/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162415.png"
deleted file mode 100644
index fc718fb..0000000
Binary files "a/DeepLearningAlgorithm/rnn/img/\345\276\256\344\277\241\346\210\252\345\233\276_20220125162415.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/rnn/readme.md b/DeepLearningAlgorithm/rnn/readme.md
deleted file mode 100644
index 9a099d3..0000000
--- a/DeepLearningAlgorithm/rnn/readme.md
+++ /dev/null
@@ -1,234 +0,0 @@
-# 【关于 RNN】那些你不知道的事
-
-> 作者:杨夕、芙蕖、李玲、陈海顺、twilight、LeoLRH、JimmyDU、张永泰
->
-> 介绍:本项目是作者们根据个人面试和经验总结出的自然语言处理(NLP)面试准备的学习笔记与资料,该资料目前包含 自然语言处理各领域的 面试题积累。
->
-> NLP 百面百搭 地址:https://github.com/km1994/NLP-Interview-Notes
->
-> **[手机版NLP百面百搭](https://mp.weixin.qq.com/s?__biz=MzAxMTU5Njg4NQ==&mid=100005719&idx=3&sn=5d8e62993e5ecd4582703684c0d12e44&chksm=1bbff26d2cc87b7bf2504a8a4cafc60919d722b6e9acbcee81a626924d80f53a49301df9bd97&scene=18#wechat_redirect)**
->
-> 推荐系统 百面百搭 地址:https://github.com/km1994/RES-Interview-Notes
->
-> **[手机版推荐系统百面百搭](https://mp.weixin.qq.com/s/b_KBT6rUw09cLGRHV_EUtw)**
->
-> 搜索引擎 百面百搭 地址:https://github.com/km1994/search-engine-Interview-Notes 【编写ing】
->
-> NLP论文学习笔记:https://github.com/km1994/nlp_paper_study
->
-> 推荐系统论文学习笔记:https://github.com/km1994/RS_paper_study
->
-> GCN 论文学习笔记:https://github.com/km1994/GCN_study
->
-> **推广搜 军火库**:https://github.com/km1994/recommendation_advertisement_search
-
-
-> **关注公众号 【关于NLP那些你不知道的事】 加入 【NLP && 推荐学习群】一起学习!!!**
-
-- [【关于 RNN】那些你不知道的事](#关于-rnn那些你不知道的事)
- - [一、RNN 篇](#一rnn-篇)
- - [1.2 为什么需要 RNN?](#12-为什么需要-rnn)
- - [1.2 RNN 结构是怎么样的?](#12-rnn-结构是怎么样的)
- - [1.3 RNN 前向计算公式?](#13-rnn-前向计算公式)
- - [1.4 RNN 存在什么问题?](#14-rnn-存在什么问题)
- - [二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇](#二长短时记忆网络long-short-term-memory-network-lstm-篇)
- - [2.1 为什么 需要 LSTM?](#21-为什么-需要-lstm)
- - [2.2 LSTM 的结构是怎么样的?](#22-lstm-的结构是怎么样的)
- - [2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题?](#23-lstm-如何缓解-rnn-梯度消失和梯度爆炸问题)
- - [2.3 LSTM 的流程是怎么样的?](#23-lstm-的流程是怎么样的)
- - [2.4 LSTM 中激活函数区别?](#24-lstm-中激活函数区别)
- - [2.5 LSTM的复杂度?](#25-lstm的复杂度)
- - [2.6 LSTM 存在什么问题?](#26-lstm-存在什么问题)
- - [三、GRU (Gated Recurrent Unit)](#三gru-gated-recurrent-unit)
- - [3.1 为什么 需要 GRU?](#31-为什么-需要-gru)
- - [3.2 GRU 的结构是怎么样的?](#32-gru-的结构是怎么样的)
- - [3.3 GRU 的前向计算?](#33-gru-的前向计算)
- - [3.4 GRU 与其他 RNN系列模型的区别?](#34-gru-与其他-rnn系列模型的区别)
- - [四、RNN系列模型篇](#四rnn系列模型篇)
- - [4.1 RNN系列模型 有什么特点?](#41-rnn系列模型-有什么特点)
- - [参考](#参考)
-
-## 一、RNN 篇
-
-### 1.2 为什么需要 RNN?
-
-无论是 全连接网络 还是 卷积神经网络 他们的前提假设都是 元素间相互独立,也就是输入和输出的一一对应,也就是一个输入得到一个输出。不同的输入之间是没有联系的。
-
-
-
-然而,在 序列数据(自然语言处理任务、时间序列任务)中,对于每一个输出,他不仅和他所对应的输入相关,还与前面其他词 和 词间的顺序相关。
-
-这个时候,全连接网络 还是 卷积神经网络 将不能很好解决该问题。
-
-RNN 之所以被称为"循环",是因为它对序列中的每个元素执行相同的任务,输出取决于先前的计算。考虑RNN的另一种方式是它们有一个“记忆”,它可以捕获到目前为止计算的信息。
-
-### 1.2 RNN 结构是怎么样的?
-
-
-
-从 上面图片中,可以看出 RNN网络 的 核心在于 $s_t$ 的值 不仅取决 xt,而且还与 $s_{t-1}$ 相关。
-
-### 1.3 RNN 前向计算公式?
-
-- 第一步,计算隐藏层的输出值
-
-
-> 注:f 为隐藏层的激活函数,一般用 softmax 函数
-
-- 第二步,计算输出层的输出值
-
-
-> 注:g 为输出层的激活函数,一般用 tanh 函数 或者 ReLU 函数
-
-### 1.4 RNN 存在什么问题?
-
-1. 梯度消失和梯度爆炸 问题
-
-- 原因
-
-误差沿时间反向传播:
-
-
-
-
-
-矩阵的模的值取决 于 上图 红框部分:
-
-> 当其大于1时,随着RNN深度的增加,矩阵的模的值呈指数函数增加,此时将出现 梯度爆炸;
->
-> 当其小于1时,随着RNN深度的增加,矩阵的模的值呈指数函数减少,此时将出现 梯度消失;
-
-- 解决方法
- - 梯度消失问题解决方法:
- - 合理的初始化权重值;
- - 使用relu代替sigmoid和tanh作为激活函数;
- - 使用其他结构的RNNs;
- - 梯度爆炸问题解决方法:
- - 设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取
-
-2. 长距离的依赖问题
-
-导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响
-
-## 二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇
-
-### 2.1 为什么 需要 LSTM?
-
-RNN 梯度消失和梯度爆炸问题
-
-### 2.2 LSTM 的结构是怎么样的?
-
-
-
-### 2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题?
-
-- 引用门控机制
- - 遗忘门:控制继续保存长期状态c;
- - 输入门:控制把即时状态输入到长期状态c;
- - 输出门:控制是否把长期状态c作为当前的LSTM的输出;
-
-- 原理:门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。
-
-### 2.3 LSTM 的流程是怎么样的?
-
-1. 遗忘门计算
-
-
-
-
-
-> δ 是 sigmoid 函数
-
-2. 输入门
-
-
-
-
-
-3. 计算用于描述当前输入的 单元状态
-
-
-
-
-
-4. 计算当前时刻的单元状态
-
-
-
-
-
-5. 输出门
-
-
-
-
-
-6. 最终输出
-
-
-
-
-
-### 2.4 LSTM 中激活函数区别?
-
-- 门控的激活函数为 sigmoid;
-- 输出的激活函数为tanh函数;
-
-### 2.5 LSTM的复杂度?
-
-序列长度为T,隐藏层维度为H
-
-O(T * H^2)
-
-### 2.6 LSTM 存在什么问题?
-
-计算量大
-
-## 三、GRU (Gated Recurrent Unit)
-
-### 3.1 为什么 需要 GRU?
-
-LSTM 计算量大
-
-### 3.2 GRU 的结构是怎么样的?
-
-
-
-### 3.3 GRU 的前向计算?
-
-- 重置门(reset gate)的计算:
-
-
-
-- 候选激活值(candidate activation)的计算
-
-
-
-- 更新门(update gate)的计算
-
-
-
-- 激活值的计算
-
-
-
-### 3.4 GRU 与其他 RNN系列模型的区别?
-
-GRU输入输出的结构与普通的RNN相似,其中的内部思想与LSTM相似。
-
-与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加”实用“的GRU啦。
-
-## 四、RNN系列模型篇
-
-### 4.1 RNN系列模型 有什么特点?
-
-- 具有记忆能力:针对文本序列,能够从头到尾阅读文章中每个单词,将前面阅读到的有用信息编码到状态变量中,从而拥有一定记忆能力,可更好理解之后的内容
-
-## 参考
-
-1. [循环神经网络(RNN)知识入门](https://zhuanlan.zhihu.com/p/149869659)
-2. [LSTM基本原理](https://docs.rnn.knowledge-precipitation.site/lstm-ji-ben-yuan-li)
-3. [循环神经网络 – Recurrent Neural Network | RNN](https://easyai.tech/ai-definition/rnn/)
-4. [循环神经网络--传统RNN、LSTM循序渐进的通俗易懂解释](https://blog.csdn.net/weixin_40363423/article/details/89925364)
-
-
diff --git a/DeepLearningAlgorithm/transformer/img/1.png b/DeepLearningAlgorithm/transformer/img/1.png
deleted file mode 100644
index 928b495..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/1.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200623092901.png b/DeepLearningAlgorithm/transformer/img/20200623092901.png
deleted file mode 100644
index 322a005..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200623092901.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200623093042.png b/DeepLearningAlgorithm/transformer/img/20200623093042.png
deleted file mode 100644
index 3f69db3..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200623093042.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200623093217.png b/DeepLearningAlgorithm/transformer/img/20200623093217.png
deleted file mode 100644
index c0a6484..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200623093217.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624080740.png b/DeepLearningAlgorithm/transformer/img/20200624080740.png
deleted file mode 100644
index ceb9a79..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624080740.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624081753.png b/DeepLearningAlgorithm/transformer/img/20200624081753.png
deleted file mode 100644
index fb88048..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624081753.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624083258.png b/DeepLearningAlgorithm/transformer/img/20200624083258.png
deleted file mode 100644
index b6f3353..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624083258.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624084515.png b/DeepLearningAlgorithm/transformer/img/20200624084515.png
deleted file mode 100644
index 4a76dd4..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624084515.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624090026.png b/DeepLearningAlgorithm/transformer/img/20200624090026.png
deleted file mode 100644
index ed904b4..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624090026.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624090034.png b/DeepLearningAlgorithm/transformer/img/20200624090034.png
deleted file mode 100644
index ef61bc4..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624090034.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20200624090357.png b/DeepLearningAlgorithm/transformer/img/20200624090357.png
deleted file mode 100644
index 72c6dbc..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20200624090357.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20201009163936.png b/DeepLearningAlgorithm/transformer/img/20201009163936.png
deleted file mode 100644
index 6cdf98c..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20201009163936.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20201009164019.png b/DeepLearningAlgorithm/transformer/img/20201009164019.png
deleted file mode 100644
index 174e3cb..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20201009164019.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20201009164053.png b/DeepLearningAlgorithm/transformer/img/20201009164053.png
deleted file mode 100644
index aa9563d..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20201009164053.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/20201125164433.png b/DeepLearningAlgorithm/transformer/img/20201125164433.png
deleted file mode 100644
index cf90b09..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/20201125164433.png and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625101229.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625101229.png"
deleted file mode 100644
index 8814146..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625101229.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625103634.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625103634.png"
deleted file mode 100644
index 77374e8..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625103634.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110603.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110603.png"
deleted file mode 100644
index 9490c81..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110603.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110706.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110706.png"
deleted file mode 100644
index 4cc4f09..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200625110706.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626120834.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626120834.png"
deleted file mode 100644
index 065709f..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626120834.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626122726.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626122726.png"
deleted file mode 100644
index e812a2a..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626122726.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626152309.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626152309.png"
deleted file mode 100644
index 3c4c40a..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626152309.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626153600.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626153600.png"
deleted file mode 100644
index df15ad1..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626153600.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626154711.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626154711.png"
deleted file mode 100644
index 773c5ec..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620200626154711.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222225802.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222225802.png"
deleted file mode 100644
index b248232..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222225802.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222230028.png" "b/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222230028.png"
deleted file mode 100644
index 82d58eb..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/QQ\346\210\252\345\233\27620201222230028.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/Transformer.png b/DeepLearningAlgorithm/transformer/img/Transformer.png
deleted file mode 100644
index 9fbc0e5..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/Transformer.png and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.gif b/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.gif
deleted file mode 100644
index eaa828e..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.gif and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.png b/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.png
deleted file mode 100644
index eaa828e..0000000
Binary files a/DeepLearningAlgorithm/transformer/img/v2-595ce4ebf9b3fccb479f7d234190af35_b.png and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625082324.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625082324.png"
deleted file mode 100644
index bba4c4e..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625082324.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085139.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085139.png"
deleted file mode 100644
index 384b52c..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085139.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085922.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085922.png"
deleted file mode 100644
index 4d83bb3..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625085922.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625090454.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625090454.png"
deleted file mode 100644
index ea460fc..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625090454.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625093537.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625093537.png"
deleted file mode 100644
index 2fabef6..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625093537.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625095930.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625095930.png"
deleted file mode 100644
index e46b5c7..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625095930.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625101800.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625101800.png"
deleted file mode 100644
index 0073695..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20200625101800.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201222225938.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201222225938.png"
deleted file mode 100644
index 89b81c0..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201222225938.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128073806.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128073806.png"
deleted file mode 100644
index 600bd85..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128073806.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074033.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074033.png"
deleted file mode 100644
index 6b84d4d..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074033.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074300.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074300.png"
deleted file mode 100644
index a78a3cd..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210128074300.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203094546.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203094546.png"
deleted file mode 100644
index 71ce3a9..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203094546.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095003.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095003.png"
deleted file mode 100644
index eeed254..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095003.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095438.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095438.png"
deleted file mode 100644
index cbe02fd..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095438.png" and /dev/null differ
diff --git "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095511.png" "b/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095511.png"
deleted file mode 100644
index 5a7aea2..0000000
Binary files "a/DeepLearningAlgorithm/transformer/img/\345\276\256\344\277\241\346\210\252\345\233\276_20211203095511.png" and /dev/null differ
diff --git a/DeepLearningAlgorithm/transformer/readme.md b/DeepLearningAlgorithm/transformer/readme.md
deleted file mode 100644
index 0e8108f..0000000
--- a/DeepLearningAlgorithm/transformer/readme.md
+++ /dev/null
@@ -1,969 +0,0 @@
-# 【关于Transformer】那些你不知道的事
-
-> 作者:杨夕
->
-> 论文链接:https://arxiv.org/pdf/1706.03762.pdf
->
-> 【注:手机阅读可能图片打不开!!!】
-
-本章主要介绍 Transformer 常见的问题,如下图所属:
-
-
-> Transformer 常见问题
-
-- [【关于Transformer】那些你不知道的事](#关于transformer那些你不知道的事)
- - [一、动机篇](#一动机篇)
- - [1.1 为什么要有 Transformer?](#11-为什么要有-transformer)
- - [1.2 Transformer 作用是什么?](#12-transformer-作用是什么)
- - [二、整体结构篇](#二整体结构篇)
- - [2.1 Transformer 整体结构是怎么样?](#21-transformer-整体结构是怎么样)
- - [2.2 Transformer-encoder 结构怎么样?](#22-transformer-encoder-结构怎么样)
- - [2.3 Transformer-decoder 结构怎么样?](#23-transformer-decoder-结构怎么样)
- - [三、模块篇](#三模块篇)
- - [3.1 self-attention 模块](#31-self-attention-模块)
- - [3.1.1 传统 attention 是什么?](#311-传统-attention-是什么)
- - [3.1.2 为什么 会有self-attention?](#312-为什么-会有self-attention)
- - [3.1.3 self-attention 的核心思想是什么?](#313-self-attention-的核心思想是什么)
- - [3.1.4 self-attention 的目的是什么?](#314-self-attention-的目的是什么)
- - [3.1.5 self-attention 的怎么计算的?](#315-self-attention-的怎么计算的)
- - [3.1.6 self-attention 为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?](#316-self-attention-为什么q和k使用不同的权重矩阵生成为何不能使用同一个值进行自身的点乘)
- - [3.1.7 为什么采用点积模型的 self-attention 而不采用加性模型?](#317-为什么采用点积模型的-self-attention-而不采用加性模型)
- - [3.1.8 Transformer 中在计算 self-attention 时为什么要scaled dot product? 即 除以 $\sqrt{d}$?](#318-transformer-中在计算-self-attention-时为什么要scaled-dot-product-即-除以-sqrtd)
- - [3.1.9 self-attention 如何解决长距离依赖问题?](#319-self-attention-如何解决长距离依赖问题)
- - [3.1.10 self-attention 如何并行化?](#3110-self-attention-如何并行化)
- - [3.1.11 为什么用双线性点积模型(即Q,K两个向量)](#3111-为什么用双线性点积模型即qk两个向量)
- - [3.2 multi-head attention 模块](#32-multi-head-attention-模块)
- - [3.2.1 multi-head attention 的思路是什么样?](#321-multi-head-attention-的思路是什么样)
- - [3.2.2 multi-head attention 的步骤是什么样?](#322-multi-head-attention-的步骤是什么样)
- - [3.2.3 Transformer为何使用多头注意力机制?(为什么不使用一个头)](#323-transformer为何使用多头注意力机制为什么不使用一个头)
- - [3.2.4 多头机制为什么有效?](#324-多头机制为什么有效)
- - [3.2.5 为什么在进行多头注意力的时候需要对每个head进行降维?](#325-为什么在进行多头注意力的时候需要对每个head进行降维)
- - [3.2.6 multi-head attention 代码介绍](#326-multi-head-attention-代码介绍)
- - [3.3 位置编码(Position encoding)模块](#33-位置编码position-encoding模块)
- - [3.3.1 为什么要 加入 位置编码(Position encoding) ?](#331-为什么要-加入-位置编码position-encoding-)
- - [3.3.2 位置编码(Position encoding)的思路是什么 ?](#332-位置编码position-encoding的思路是什么-)
- - [3.3.3 位置编码(Position encoding)的作用是什么 ?](#333-位置编码position-encoding的作用是什么-)
- - [3.3.4 位置编码(Position encoding)的步骤是什么 ?](#334-位置编码position-encoding的步骤是什么-)
- - [3.3.5 Position encoding为什么选择相加而不是拼接呢?](#335-position-encoding为什么选择相加而不是拼接呢)
- - [3.3.6 Position encoding和 Position embedding的区别?](#336-position-encoding和-position-embedding的区别)
- - [3.3.7 为何17年提出Transformer时采用的是 Position Encoder 而不是Position Embedding?而Bert却采用的是 Position Embedding ?](#337-为何17年提出transformer时采用的是-position-encoder--而不是position-embedding而bert却采用的是-position-embedding-)
- - [3.3.8 位置编码(Position encoding)的代码介绍](#338-位置编码position-encoding的代码介绍)
- - [3.4 残差模块模块](#34-残差模块模块)
- - [3.4.1 为什么要 加入 残差模块?](#341-为什么要-加入-残差模块)
- - [3.5 Layer normalization 模块](#35-layer-normalization-模块)
- - [3.5.1 为什么要 加入 Layer normalization 模块?](#351-为什么要-加入-layer-normalization-模块)
- - [3.5.2 Layer normalization 模块的是什么?](#352-layer-normalization-模块的是什么)
- - [3.5.3 Batch normalization 和 Layer normalization 的区别?](#353-batch-normalization-和-layer-normalization-的区别)
- - [3.5.4 Transformer 中为什么要舍弃 Batch normalization 改用 Layer normalization 呢?](#354-transformer-中为什么要舍弃-batch-normalization-改用-layer-normalization-呢)
- - [3.5.5 Layer normalization 模块代码介绍](#355--layer-normalization-模块代码介绍)
- - [3.6 Mask 模块](#36-mask-模块)
- - [3.6.1 什么是 Mask?](#361-什么是-mask)
- - [3.6.2 Transformer 中用到 几种 Mask?](#362-transformer-中用到-几种-mask)
- - [3.6.3 能不能介绍一下 Transformer 中用到几种 Mask?](#363-能不能介绍一下-transformer-中用到几种-mask)
- - [3.7 Feed forward network (FFN)](#37-feed-forward-network-ffn)
- - [3.7.1 Feed forward network (FFN)的作用?](#371-feed-forward-network-ffn的作用)
- - [3.8 GELU](#38-gelu)
- - [3.8.1 GELU原理?相比RELU的优点?](#381-gelu原理相比relu的优点)
- - [3.9 Transformer的非线性来自于哪里?](#39-transformer的非线性来自于哪里)
- - [参考](#参考)
-
-## 一、动机篇
-
-### 1.1 为什么要有 Transformer?
-
-为什么要有 Transformer? 首先需要知道在 Transformer 之前都有哪些技术,这些技术所存在的问题:
-
-- RNN:能够捕获长距离依赖信息,但是无法并行;
-- CNN: 能够并行,无法捕获长距离依赖信息(需要通过层叠 or 扩张卷积核 来 增大感受野);
-- 传统 Attention
- - 方法:基于源端和目标端的隐向量计算Attention,
- - 结果:源端每个词与目标端每个词间的依赖关系 【源端->目标端】
- - 问题:忽略了 远端或目标端 词与词间 的依赖关系
-
-### 1.2 Transformer 作用是什么?
-
-基于Transformer的架构主要用于建模语言理解任务,它避免了在神经网络中使用递归,而是完全依赖于self-attention机制来绘制输入和输出之间的全局依赖关系。
-
-## 二、整体结构篇
-
-### 2.1 Transformer 整体结构是怎么样?
-
-- Transformer 整体结构:
- - encoder-decoder 结构
-- 具体介绍:
- - 左边是一个 Encoder;
- - 右边是一个 Decoder;
-
-
-> Transformer 整体结构
-
-1. 整体结构放大一点
-
-从上一张 Transformer 结构图,可以知道 Transformer 是一个 encoder-decoder 结构,但是 encoder 和 decoder 又包含什么内容呢?
-- Encoder 结构:
- - 内部包含6层小encoder 每一层里面有2个子层;
-- Decoder 结构:
- - 内部也是包含6层小decoder ,每一层里面有3个子层
-
-
-> Transformer encoder-decoder 结构
-
-1. 整体结构再放大一点
-
- 其中上图中每一层的内部结构如下图所求。
- - 上图左边的每一层encoder都是下图左边的结构;
- - 上图右边的每一层的decoder都是下图右边的结构;
-
-具体内容,后面会逐一介绍。
-
-
-> Transformer encoder-decoder 内部结构
-
-- 代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- class Transformer(tf.keras.Model):
- def __init__(self, num_layers, d_model, num_heads, dff, input_vocab_size, target_vocab_size, pe_input, pe_target, rate=0.1):
- super(Transformer, self).__init__()
- # Encoder 模块
- self.encoder = Encoder(num_layers, d_model, num_heads, dff, input_vocab_size, pe_input, rate)
- # Decoder 模块
- self.decoder = Decoder(num_layers, d_model, num_heads, dff, target_vocab_size, pe_target, rate)
- # 全连接层
- self.final_layer = tf.keras.layers.Dense(target_vocab_size)
-
- def call(self, inp, tar, training, enc_padding_mask, look_ahead_mask, dec_padding_mask):
- # step 1: encoder
- enc_output = self.encoder(inp, training, enc_padding_mask)
- # step 2:decoder
- dec_output, attention_weights = self.decoder(tar, enc_output, training, look_ahead_mask, dec_padding_mask)
- # step 3:全连接层
- final_output = self.final_layer(dec_output)
-
- return final_output, attention_weights
-```
-
-### 2.2 Transformer-encoder 结构怎么样?
-
-
-> Transformer encoder 结构
-
-- 特点:
- - 与 RNN,CNN 类似,可以当成一个特征提取器;
-- 组成结构介绍
- - embedding 层:将 input 转化为 embedding 向量 $X$;
- - Position encodding: input的位置与 input 的 embedding $X$ 相加 得到 向量 $X$;
- - self-attention : 将融合input的位置信息 与 input 的 embedding 信息的 $X$ 输入 Self-Attention 层得到 $Z$;
- - 残差网络:$Z$ 与 $X$ 相加后经过 layernorm 层;
- - 前馈网络:经过一层前馈网络以及 Add&Normalize,(线性转换+relu+线性转换 如下式)
-
-
-
-- 举例说明(假设序列长度固定,如100,如输入的序列是“我爱中国”):
- - 首先需要 **encoding**:
- - 将词映射成一个数字,encoding后,由于序列不足固定长度,因此需要padding,
- - 然后输入 embedding层,假设embedding的维度是128,则输入的序列维度就是100*128;
- - 接着是**Position encodding**,论文中是直接将每个位置通过cos-sin函数进行映射;
- - 分析:这部分不需要在网络中进行训练,因为它是固定。但现在很多论文是将这块也embedding,如bert的模型,至于是encoding还是embedding可取决于语料的大小,语料足够大就用embedding。将位置信息也映射到128维与上一步的embedding相加,输出100*128
- - 经过**self-attention层**:
- - 操作:假设v的向量最后一维是64维(假设没有多头),该部分输出100*64;
- - 经过残差网络:
- - 操作:即序列的embedding向量与上一步self-attention的向量加总;
- - 经过 **layer-norm**:
- - 原因:
- - 由于在self-attention里面更好操作而已;
- - 真实序列的长度一直在变化;
- - 经过 **前馈网络**:
- - 目的:增加非线性的表达能力,毕竟之前的结构基本都是简单的矩阵乘法。若前馈网络的隐向量是512维,则结构最后输出100*512;
-- Transformer Encoder 单元 代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- class EncoderLayer(tf.keras.layers.Layer):
- def __init__(self, d_model, num_heads, dff, rate=0.1):
- super(EncoderLayer, self).__init__()
-
- self.mha = MultiHeadAttention(d_model, num_heads)
- self.ffn = point_wise_feed_forward_network(d_model, dff)
-
- self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
- self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
-
- self.dropout1 = tf.keras.layers.Dropout(rate)
- self.dropout2 = tf.keras.layers.Dropout(rate)
-
- def call(self, x, training, mask):
- # step 1:多头自注意力
- attn_output, _ = self.mha(x, x, x, mask)
- # step 2:前馈网络
- attn_output = self.dropout1(attn_output, training=training)
- # step 3:Layer Norml
- out1 = self.layernorm1(x + attn_output)
- # step 4:前馈网络
- ffn_output = self.ffn(out1)
- ffn_output = self.dropout2(ffn_output, training=training)
- # step 5:Layer Norml
- out2 = self.layernorm2(out1 + ffn_output)
-
- return out2
-```
-
-- Transformer Encoder 模块代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- class Encoder(tf.keras.layers.Layer):
- def __init__(self, num_layers, d_model, num_heads, dff, input_vocab_size, maximum_position_encoding, rate=0.1):
- super(Encoder, self).__init__()
-
- self.d_model = d_model
- self.num_layers = num_layers # encoder 层数
- # 词嵌入
- self.embedding = tf.keras.layers.Embedding(input_vocab_size, d_model)
- # 位置编码
- self.positional_encoding_obj = Positional_Encoding()
- self.pos_encoding = self.positional_encoding_obj.positional_encoding(maximum_position_encoding, self.d_model)
- # Encoder 模块构建
- self.enc_layers = [EncoderLayer(d_model, num_heads, dff, rate) for _ in range(num_layers)]
-
- self.dropout = tf.keras.layers.Dropout(rate)
-
- def call(self, x, training, mask):
- seq_len = tf.shape(x)[1]
- # step 1:词嵌入
- x = self.embedding(x)
- x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
- # step 2:位置编码
- x += self.pos_encoding[:, :seq_len, :]
- x = self.dropout(x, training=training)
- # step 3:Encoder 模块构建
- for i in range(self.num_layers):
- x = self.enc_layers[i](x, training, mask)
- return x
-```
-
-### 2.3 Transformer-decoder 结构怎么样?
-
-
-> Transformer decoder 结构
-
-- 特点:与 encoder 类似
-- 组成结构介绍
- - masked 层:
- - 目的:确保了位置 i 的预测仅依赖于小于 i 的位置处的已知输出;
- - Linear layer:
- - 目的:将由解码器堆栈产生的向量投影到一个更大的向量中,称为对数向量。这个向量对应着模型的输出词汇表;向量中的每个值,对应着词汇表中每个单词的得分;
- - softmax层:
- - 操作:这些分数转换为概率(所有正数,都加起来为1.0)。选择具有最高概率的单元,并且将与其相关联的单词作为该时间步的输出
-- Transformer Decoder 单元 代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- class DecoderLayer(tf.keras.layers.Layer):
- def __init__(self, d_model, num_heads, dff, rate=0.1):
- super(DecoderLayer, self).__init__()
-
- self.mha1 = MultiHeadAttention(d_model, num_heads)
- self.mha2 = MultiHeadAttention(d_model, num_heads)
-
- self.ffn = point_wise_feed_forward_network(d_model, dff)
-
- self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
- self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
- self.layernorm3 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
-
- self.dropout1 = tf.keras.layers.Dropout(rate)
- self.dropout2 = tf.keras.layers.Dropout(rate)
- self.dropout3 = tf.keras.layers.Dropout(rate)
-
-
- def call(self, x, enc_output, training, look_ahead_mask, padding_mask):
- # step 1:带 sequence mask 的 多头自注意力
- attn1, attn_weights_block1 = self.mha1(x, x, x, look_ahead_mask)
- attn1 = self.dropout1(attn1, training=training)
- # step 2:Layer Norm
- out1 = self.layernorm1(attn1 + x)
- # step 3:带 padding mask 的 多头自注意力
- attn2, attn_weights_block2 = self.mha2(enc_output, enc_output, out1, padding_mask)
- attn2 = self.dropout2(attn2, training=training)
- # step 4:Layer Norm
- out2 = self.layernorm2(attn2 + out1)
- # step 5:前馈网络
- ffn_output = self.ffn(out2)
- ffn_output = self.dropout3(ffn_output, training=training)
- # step 6:Layer Norm
- out3 = self.layernorm3(ffn_output + out2)
- return out3, attn_weights_block1, attn_weights_block2
-
-```
-
-- Transformer Decoder 模块代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- class Decoder(tf.keras.layers.Layer):
- def __init__(self, num_layers, d_model, num_heads, dff, target_vocab_size, maximum_position_encoding, rate=0.1):
- super(Decoder, self).__init__()
-
- self.d_model = d_model
- self.num_layers = num_layers # encoder 层数
- # 词嵌入
- self.embedding = tf.keras.layers.Embedding(target_vocab_size, d_model)
- # 位置编码
- self.positional_encoding_obj = Positional_Encoding()
- self.pos_encoding = self.positional_encoding_obj.positional_encoding(maximum_position_encoding, d_model)
- # Dncoder 模块构建
- self.dec_layers = [DecoderLayer(d_model, num_heads, dff, rate) for _ in range(num_layers)]
- self.dropout = tf.keras.layers.Dropout(rate)
-
- def call(self, x, enc_output, training, look_ahead_mask, padding_mask):
- seq_len = tf.shape(x)[1]
- attention_weights = {}
- # step 1:词嵌入
- x = self.embedding(x)
- x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
- # step 2:位置编码
- x += self.pos_encoding[:, :seq_len, :]
-
- x = self.dropout(x, training=training)
- # step 3:Dncoder 模块构建
- for i in range(self.num_layers):
- x, block1, block2 = self.dec_layers[i](x, enc_output, training, look_ahead_mask, padding_mask)
-
- attention_weights['decoder_layer{}_block1'.format(i+1)] = block1
- attention_weights['decoder_layer{}_block2'.format(i+1)] = block2
-
- return x, attention_weights
-
-```
-
-## 三、模块篇
-
-### 3.1 self-attention 模块
-
-#### 3.1.1 传统 attention 是什么?
-
-在介绍 self-attention 之前,首先需要介绍一下 传统的 attention,其结构如下图所示:
-
-
-> 传统的 attention 结构
-
-- 注意力机制是什么呢?
- - 就是将精力集中于某一个点上
- - 举个例子:
- - 你在超市买东西,突然一个美女从你身边走过,这个时候你会做什么呢?
- - 没错,就是将视线【也就是注意力】集中于这个美女身上,而周围环境怎么样,你都不关注。
-- 思路
- - 输入 给定 Target 中某个 query;
- - 计算权值 Score:
- - 计算 query 和 各个 Key 的相似度或相关性,得到每个 Key 对应 value 的权值系数;
- - 对 权值 Score 和 value 进行加权求和
-- 核心:
- - Attention 机制 是对 source 中各个元素 的 value 进行加权求和,而 query 和 key 用于计算 对应 value 的权值系数
-
-
-
-> $L_x=||Source||$代表Source的长度
-
-- 概念:
- - attention 的核心 就是从 大量信息中 筛选出少量的 重要信息;
- - 具体操作:每个 value 的 权值系数,代表 其 重要度;
-
-
-> 传统的 attention 流程
-
-- 具体流程介绍
- - step 1:计算权值系数
- - 采用 不同的函数或计算方式,对 query 和 key 进行计算,求出相似度或相关性
- - 采用的计算方法:
- - 向量点积:
-
- 
-
- - Cosine 相似度计算:
-
- 
-
- - MLP 网络:
-
- 
-
- - step 2: softmax 归一化
- - 原因:
- 1. score 值分布过散,将原始计算分值整理成所有元素权重之和为1 的概率分布;
- 2. 可以通过SoftMax的内在机制更加突出重要元素的权重;
- - 公式介绍
-
- 
-
- - step 3: 加权求和
- - 公式介绍:
- - 计算结果 $a_i$ 即为 $value_i$ 对应的权重系数,然后进行加权求和即可得到Attention数值
-
-
-
-- 存在问题
- - 忽略了 源端或目标端 词与词间 的依赖关系【以上面栗子为例,就是把注意力集中于美女身上,而没看自己周围环境,结果可能就扑街了!】
-
-#### 3.1.2 为什么 会有self-attention?
-
-- CNN 所存在的长距离依赖问题;
-- RNN 所存在的无法并行化问题【虽然能够在一定长度上缓解 长距离依赖问题】;
-- 传统 Attention
- - 方法:基于源端和目标端的隐向量计算Attention,
- - 结果:源端每个词与目标端每个词间的依赖关系 【源端->目标端】
- - 问题:忽略了 远端或目标端 词与词间 的依赖关系
-
-#### 3.1.3 self-attention 的核心思想是什么?
-
-- 核心思想:self-attention的结构在计算每个token时,总是会考虑整个序列其他token的表达;
- - 举例:“我爱中国”这个序列,在计算"我"这个词的时候,不但会考虑词本身的embedding,也同时会考虑其他词对这个词的影响
-
-#### 3.1.4 self-attention 的目的是什么?
-
-- 目的:学习句子内部的词依赖关系,捕获句子的内部结构。
-
-#### 3.1.5 self-attention 的怎么计算的?
-
-
-> self-attention 计算公式
-
-
-> self-attention 结构图
-
-- **一句话概述:每个位置的embedding对应 Q,K,V 三个向量,这三个向量分别是embedding点乘 WQ,WK,WV 矩阵得来的。每个位置的Q向量去乘上所有位置的K向量,其结果经过softmax变成attention score,以此作为权重对所有V向量做加权求和即可。**
-
-- 具体步骤
- - embedding层:
- - 目的:将词转化成embedding向量;
- - Q,K,V 向量计算:
- - 根据 embedding 和权重矩阵,得到Q,K,V;
- - Q:查询向量,目标字作为 Query;
- - K:键向量,其上下文的各个字作为 Key;
- - V:值向量,上下文各个字的 Value;
- - 权重 score 计算:
- - 查询向量 query 点乘 key;
- - 目的:计算其他词对这个词的重要性,也就是权值;
- - scale 操作:
- - 乘以 $\frac{1}{\sqrt{d_{k}}}$;
- - 目的:起到调节作用,使得内积不至于太大。实际上是Q,K,V的最后一个维度,当 $d_k$ 越大, $QK^T$ 就越大,可能会将 Softmax 函数推入梯度极小的区域;
- - Softmax 归一化:
- - 经过 Softmax 归一化;
- - Attention 的输出计算:
- - 权值 score 和各个上下文字的 V 向量 的加权求和
- - 目的:把上下文各个字的 V 融入目标字的原始 V 中
-- 举例
- - 答案就是文章中的Q,K,V,这三个向量都可以表示"我"这个词,但每个向量的作用并不一样,Q 代表 query,当计算"我"这个词时,它就能代表"我"去和其他词的 K 进行点乘计算其他词对这个词的重要性,所以此时其他词(包括自己)使用 K 也就是 key 代表自己,当计算完点乘后,我们只是得到了每个词对“我”这个词的权重,需要再乘以一个其他词(包括自己)的向量,也就是V(value),才完成"我"这个词的计算,同时也是完成了用其他词来表征"我"的一个过程
-
-- 优点
- - 捕获源端和目标端词与词间的依赖关系
- - 捕获源端或目标端自身词与词间的依赖关系
-- 代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- def scaled_dot_product_attention(q, k, v, mask):
- # s1:权重 score 计算:查询向量 query 点乘 key
- matmul_qk = tf.matmul(q, k, transpose_b=True)
- # s2:scale 操作:除以 sqrt(dk),将 Softmax 函数推入梯度极小的区域
- dk = tf.cast(tf.shape(k)[-1], tf.float32)
- scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)
- # s3:
- if mask is not None:
- scaled_attention_logits += (mask * -1e9)
- # s4:Softmax 归一化
- attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1)
- # s5:加权求和
- output = tf.matmul(attention_weights, v)
- return output, attention_weights
-```
-
-#### 3.1.6 self-attention 为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?
-
-因为Q、K、V的不同,可以保证在不同空间进行投影,增强了表达能力,提高了泛化能力。
-
-#### 3.1.7 为什么采用点积模型的 self-attention 而不采用加性模型?
-
-主要原因:在理论上,加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘法,而矩阵乘法有很多加速策略,因此能加速训练。但是论文中实验表明,当维度$d$越来越大时,加性模型的效果会略优于点积模型,原因应该是加性模型整体上还是比点积模型更复杂(有非线性因素)。
-
-#### 3.1.8 Transformer 中在计算 self-attention 时为什么要scaled dot product? 即 除以 $\sqrt{d}$?
-
-> 一句话回答:当输入信息的维度 d 比较高,会导致 softmax 函数接近饱和区,梯度会比较小。因此,缩放点积模型可以较好地解决这一问题。
-
-> 具体分析:
-
-- 因为对于,如果某个相对于其他元素很大的话,那么对此向量softmax后就容易得到一个onehot向量,不够“soft”了,而且反向传播时梯度为0会导致梯度消失;
-
-
-
-- 原论文是这么解释的:假设每个$\boldsymbol q\in R^d$和$\boldsymbol k\in R^d$的每个维度都是服从均值为0方差为1的,那么二者的内积$\boldsymbol q^T\boldsymbol k$的均值就是0,方差就是$d$,所以内积的方差和原始方差之间的比例大约是维度值$d$,为了降低内积各个维度值的方差(这样各个维度取值就在均值附近,不会存在某个维度偏离均值太远),所以要除以$\sqrt{d}$(标准差)
-
-#### 3.1.9 self-attention 如何解决长距离依赖问题?
-
-- 引言:
- - 在上一个问题中,我们提到 CNN 和 RNN 在处理长序列时,都存在 长距离依赖问题,那么你是否会有这样 几个问题:
- - 长距离依赖问题 是什么呢?
- - 为什么 CNN 和 RNN 无法解决长距离依赖问题?
- - 之前提出过哪些解决方法?
- - self-attention 是如何 解决 长距离依赖问题的呢?
-
-下面,我们将会围绕着几个问题,进行一一解答。
-
-- 长距离依赖问题 是什么呢?
- - 介绍:对于序列问题,第 $t$ 时刻 的 输出 $y_t$ 依赖于 $t$ 之前的输入,也就是 说 依赖于 $x_{t-k}, k=1,...,t$,当间隔 $k$ 逐渐增大时,$x_{t-k}$ 的信息将难以被 $y_t$ 所学习到,也就是说,很难建立 这种 长距离依赖关系,这个也就是 长距离依赖问题(Long-Term Dependencies Problem)。
-- 为什么 CNN 和 RNN 无法解决长距离依赖问题?
- - CNN:
- - 捕获信息的方式:
- - CNN 主要采用 卷积核 的 方式捕获 句子内的局部信息,你可以把他理解为 **基于 n-gram 的局部编码方式**捕获局部信息
- - 问题:
- - 因为是 n-gram 的局部编码方式,那么当 $k$ 距离 大于 $n$ 时,那么 $y_t$ 将难以学习 $x_{t-k}$ 信息;
- - 举例:
- - 其实 n-gram 类似于 人的 视觉范围,人的视觉范围 在每一时刻 只能 捕获 一定 范围内 的信息,比如,你在看前面的时候,你是不可能注意到背后发生了什么,除非你转过身往后看。
- - RNN:
- - 捕获信息的方式:
- - RNN 主要 通过 循环 的方式学习(记忆) 之前的信息$x_{t}$;
- - 问题:
- - 但是随着时间 $t$ 的推移,你会出现**梯度消失或梯度爆炸**问题,这种问题使你只能建立短距离依赖信息。
- - 举例:
- - RNN 的学习模式好比于 人类 的记忆力,人类可能会对 短距离内发生的 事情特别清楚,但是随着时间的推移,人类开始 会对 好久之前所发生的事情变得印象模糊,比如,你对小时候发生的事情,印象模糊一样。
- - 解决方法:
- - 针对该问题,后期也提出了很多 RNN 变体,比如 LSTM、 GRU,这些变体 通过引入 门控的机制 来 有选择性 的记忆 一些 重要的信息,但是这种方法 也只能在 一定程度上缓解 长距离依赖问题,但是并不能 从根本上解决问题。
-
-
-> 基于卷积网络和循环网络的变长序列编码
-
-- 之前提出过哪些解决方法?
- - 引言:
- - 那么 之前 主要采用 什么方法 解决问题呢?
- - 解决方法:
- - 增加网络的层数
- - 通过一个深层网络来获取远距离的信息交互
- - 使用全连接网络
- - 通过全连接的方法对 长距离 建模;
- - 问题:
- - 无法处理变长的输入序列;
- - 不同的输入长度,其连接权重的大小也是不同的;
-
-
-> 全连接模型和自注意力模型
-
-- self-attention 是如何 解决 长距离依赖问题的呢?
- - 解决方式:
- - 利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列
- - 具体介绍:
- - 对于 当前query,你需要 与 句子中 所有 key 进行点乘后再 Softmax ,以获得 句子中 所有 key 对于 当前query 的 score(可以理解为 贡献度),然后与 所有词 的 value 向量进行加权融合之后,就能使 当前 $y_t$ 学习到句子中 其他词$x_{t-k}$的信息;
-
-#### 3.1.10 self-attention 如何并行化?
-
-- 引言:
- - 在上一个问题中,我们主要讨论了 CNN 和 RNN 在处理长序列时,都存在 长距离依赖问题,以及 Transformer 是 如何解决 长距离依赖问题,但是对于 RNN ,还存在另外一个问题:
- - 无法并行化问题
- - 那么,Transformer 是如何进行并行化的呢?
-- Transformer 如何进行并行化?
- - 核心:self-attention
- - 为什么 RNN 不能并行化:
- - 原因:RNN 在 计算 $x_i$ 的时候,需要考虑到 $x_1 ~ x_{i-1}$ 的 信息,使得 RNN 只能 从 $x_1$ 计算到 $x_i$;
- - 思路:
- - 在 self-attention 能够 并行的 计算 句子中不同 的 query,因为每个 query 之间并不存在 先后依赖关系,也使得 transformer 能够并行化;
-
-#### 3.1.11 为什么用双线性点积模型(即Q,K两个向量)
-
-双线性点积模型使用Q,K两个向量,而不是只用一个Q向量,这样引入非对称性,更具健壮性(Attention对角元素值不一定是最大的,也就是说当前位置对自身的注意力得分不一定最高)。
-
-### 3.2 multi-head attention 模块
-
-#### 3.2.1 multi-head attention 的思路是什么样?
-
-- 思路:
- - 相当于 $h$ 个 不同的 self-attention 的集成
- - 就是把self-attention做 n 次,取决于 head 的个数;论文里面是做了8次。
-
-#### 3.2.2 multi-head attention 的步骤是什么样?
-
-- 步骤:
- - step 1 : 初始化 N 组 $Q,K,V$矩阵(论文为 8组);
-
-
-> 初始化 N 组 $Q,K,V$矩阵
-
- - step 2 : 每组 分别 进行 self-attention;
- - step 3:
- - 问题:多个 self-attention 会得到 多个 矩阵,但是前馈神经网络没法输入8个矩阵;
- - 目标:把8个矩阵降为1个
- - 步骤:
- - 每次self-attention都会得到一个 Z 矩阵,把每个 Z 矩阵拼接起来,
- - 再乘以一个Wo矩阵,
- - 得到一个最终的矩阵,即 multi-head Attention 的结果;
-
-
-> 合并 8 个矩阵
-
-最后,让我们来看一下完整的流程:
-
-
-> 完整的流程
-
-换一种表现方式:
-
-
-> multi-head attention 表示方式
-
-- 动图介绍
-
-
-> multi-head attention 动图展示
-
-#### 3.2.3 Transformer为何使用多头注意力机制?(为什么不使用一个头)
-
-为了让 Transformer 能够注意到不同子空间的信息,从而捕获到跟多的特征信息。【本质:实验定律】
-
-#### 3.2.4 多头机制为什么有效?
-
-类似于CNN中通过多通道机制进行特征选择。Transformer中使用切头(split)的方法,是为了在不增加复杂度($O(n^2 d)$)的前提下享受类似CNN中“不同卷积核”的优势。
-
-#### 3.2.5 为什么在进行多头注意力的时候需要对每个head进行降维?
-
-Transformer的多头注意力看上去是借鉴了CNN中同一卷积层内使用多个卷积核的思想,原文中使用了 8 个“scaled dot-product attention”,在同一“multi-head attention”层中,输入均为“KQV”,同时进行注意力的计算,彼此之前参数不共享,最终将结果拼接起来,这样可以允许模型在不同的表示子空间里学习到相关的信息,在此之前的 A Structured Self-attentive Sentence Embedding 也有着类似的思想。简而言之,就是希望每个注意力头,只关注最终输出序列中一个子空间,互相独立。其核心思想在于,抽取到更加丰富的特征信息。
-
-#### 3.2.6 multi-head attention 代码介绍
-
-- multi-head attention 模块代码讲解【注:代码采用 tensorflow 框架编写】
-```s
- class MultiHeadAttention(tf.keras.layers.Layer):
- def __init__(self, d_model, num_heads):
- super(MultiHeadAttention, self).__init__()
- self.num_heads = num_heads
- self.d_model = d_model
- assert d_model % self.num_heads == 0
- self.depth = d_model // self.num_heads
- # 初始化 Q,K,V 矩阵
- self.wq = tf.keras.layers.Dense(d_model)
- self.wk = tf.keras.layers.Dense(d_model)
- self.wv = tf.keras.layers.Dense(d_model)
- self.dense = tf.keras.layers.Dense(d_model)
-
- def split_heads(self, x, batch_size):
- x = tf.reshape(x, (batch_size, -1, self.num_heads, self.depth))
- return tf.transpose(x, perm=[0, 2, 1, 3])
-
- def call(self, v, k, q, mask):
- batch_size = tf.shape(q)[0]
- # step 1:利用矩阵计算 q,k,v
- q = self.wq(q)
- k = self.wk(k)
- v = self.wv(v)
- # step 2:
- q = self.split_heads(q, batch_size)
- k = self.split_heads(k, batch_size)
- v = self.split_heads(v, batch_size)
- # step 3:每组 分别 进行 self-attention
- scaled_attention, attention_weights = scaled_dot_product_attention(
- q, k, v, mask)
- # step 4:矩阵拼接
- scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3])
- concat_attention = tf.reshape(scaled_attention, (batch_size, -1, self.d_model))
- # step 5:全连接层
- output = self.dense(concat_attention)
- return output, attention_weights
-```
-
-### 3.3 位置编码(Position encoding)模块
-
-#### 3.3.1 为什么要 加入 位置编码(Position encoding) ?
-
-- 问题:
- - 介绍:缺乏 一种 表示 输入序列中 单词顺序 的方法
- - 说明:因为模型不包括Recurrence/Convolution,因此是无法捕捉到序列顺序信息的,例如将K、V按行进行打乱,那么Attention之后的结果是一样的。但是序列信息非常重要,代表着全局的结构,因此必须将序列的分词相对或者绝对position信息利用起来
-- 目的:加入词序信息,使 Attention 能够分辨出不同位置的词
-
-#### 3.3.2 位置编码(Position encoding)的思路是什么 ?
-
-- 思路:
- - 在 encoder 层和 decoder 层的输入添加了一个额外的向量Positional Encoding,维度和embedding的维度一样,让模型学习到这个值
-
-#### 3.3.3 位置编码(Position encoding)的作用是什么 ?
-
-- 位置向量的作用:
- - 决定当前词的位置;
- - 计算在一个句子中不同的词之间的距离
-
-#### 3.3.4 位置编码(Position encoding)的步骤是什么 ?
-
-- 步骤:
- - 将每个位置编号,
- - 然后每个编号对应一个向量,
- - 通过将位置向量和词向量相加,就给每个词都引入了一定的位置信息。
-
-
-> 位置编码(Position encoding) 结构图
-
-- 论文的位置编码是使用三角函数去计算的。好处:
- - 值域只有[-1,1]
- - 容易计算相对位置。
-
-
-
-> 注:
-> pos 表示当前词在句子中的位置
-> i 表示向量中每个值 的 index
-> 在偶数位置:使用 正弦编码 sin();
-> 在奇数位置:使用 余弦编码 cos();
-
-#### 3.3.5 Position encoding为什么选择相加而不是拼接呢?
-
-因为$[W1 W2][e; p] = W1e + W2p,W(e+p)=We+Wp$,就是说求和相当于拼接的两个权重矩阵共享(W1=W2=W),但是这样权重共享是明显限制了表达能力的。
-
-#### 3.3.6 Position encoding和 Position embedding的区别?
-
-- Position encoding 构造简单直接无需额外的学习参数;能兼容预训练阶段的最大文本长度和训练阶段的最大文本长度不一致;
-- Position embedding 构造也简单直接但是需要额外的学习参数;训练阶段的最大文本长度不能超过预训练阶段的最大文本长度(因为没学过这么长的,不知道如何表示);但是Position embedding 的潜力在直觉上会比 Position encoding 大,因为毕竟是自己学出来的,只有自己才知道自己想要什么(前提是数据量得足够大)。
-
-#### 3.3.7 为何17年提出Transformer时采用的是 Position Encoder 而不是Position Embedding?而Bert却采用的是 Position Embedding ?
-
-- Transformer 的作者在论文中对比了 Position Encoder 和 Position Embedding,在模型精度上没有明显区别。出于对序列长度限制和参数量规模的考虑,最终选择了 Encode 的形式。那么为什么Bert不这么干呢?主要原因如下:
- - 模型的结构需要服务于模型的目标:Transformer最开始提出是针对机器翻译任务的,而机器翻译任务对词序特征要求不高,因此在效果差不多的情况下选择Position Encoder 足矣。但是Bert是作为通用的预训练模型,下游任务有很多对词序特征要求很高,因此选择潜力比较大的Position Embedding会更好;
- - 数据量的角度:Transformer用的数据量没有Bert的数据量大,所以使用潜力无限的 Position Embedding 会有大力出奇迹的效果;
-
-#### 3.3.8 位置编码(Position encoding)的代码介绍
-
-- 位置编码(Position encoding)模块代码讲解【注:代码采用 tensorflow 框架编写】
-
-```s
- # 位置编码 类
- class Positional_Encoding():
- def __init__(self):
- pass
- # 功能:计算角度 函数
- def get_angles(self, position, i, d_model):
- '''
- 功能:计算角度 函数
- input:
- position 单词在句子中的位置
- i 维度
- d_model 向量维度
- '''
- angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
- return position * angle_rates
- # 功能:位置编码 函数
- def positional_encoding(self, position, d_model):
- '''
- 功能:位置编码 函数
- input:
- position 单词在句子中的位置
- d_model 向量维度
- '''
- angle_rads = self.get_angles(
- np.arange(position)[:, np.newaxis],
- np.arange(d_model)[np.newaxis, :],
- d_model
- )
-
- # apply sin to even indices in the array; 2i
- angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2])
-
- # apply cos to odd indices in the array; 2i+1
- angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2])
-
- pos_encoding = angle_rads[np.newaxis, ...]
-
- return tf.cast(pos_encoding, dtype=tf.float32)
-```
-
-### 3.4 残差模块模块
-
-#### 3.4.1 为什么要 加入 残差模块?
-
-- 动机:因为 transformer 堆叠了 很多层,容易 梯度消失或者梯度爆炸
-
-### 3.5 Layer normalization 模块
-
-#### 3.5.1 为什么要 加入 Layer normalization 模块?
-
-- 动机:因为 transformer 堆叠了 很多层,容易 梯度消失或者梯度爆炸;
-- 原因:
- - 数据经过该网络层的作用后,不再是归一化,偏差会越来越大,所以需要将 数据 重新 做归一化处理;
-- 目的:
- - 在数据送入激活函数之前进行normalization(归一化)之前,需要将输入的信息利用 normalization 转化成均值为0方差为1的数据,避免因输入数据落在激活函数的饱和区而出现 梯度消失或者梯度爆炸 问题
-
-#### 3.5.2 Layer normalization 模块的是什么?
-
-- 介绍:
- - 归一化的一种方式
- - 对每一个样本介绍均值和方差【这个与 BN 有所不同,因为他是在 批方向上 计算均值和方差】
-
-#### 3.5.3 Batch normalization 和 Layer normalization 的区别?
-- 公式
-
-> BN 计算公式
-
-
-
-> LN 计算公式
-
-
-
-- Batch normalization — 为每一个小batch计算每一层的平均值和方差
-- Layer normalization — 独立计算每一层每一个样本的均值和方差
-
-#### 3.5.4 Transformer 中为什么要舍弃 Batch normalization 改用 Layer normalization 呢?
-
-原始BN是为CNN而设计的,对整个batchsize范围内的数据进行考虑;
-
-**对于RNN来说,sequence的长度是不一致的,所以用很多padding来表示无意义的信息。如果用 BN 会导致有意义的embedding 损失信息。**
-
-所以,BN一般用于CNN,而LN用于RNN。
-
-layernorm是**在hidden size的维度进行**的,**跟batch和seq_len无关**。每个hidden state都计算自己的均值和方差,这是因为不同hidden state的量纲不一样。beta和gamma的维度都是(hidden_size,),经过白化的hidden state * beta + gamma得到最后的结果。
-
-**LN在BERT中主要起到白化的作用,增强模型稳定性(如果删除则无法收敛)**
-
-- 参考:[Transformer代码+面试细节](https://zhuanlan.zhihu.com/p/438634058)
-
-#### 3.5.5 Layer normalization 模块代码介绍
-
-- Layer normalization 模块代码讲解【注:代码采用 tensorflow 框架编写】
-```s
- class EncoderLayer(tf.keras.layers.Layer):
- def __init__(self, d_model, num_heads, dff, rate=0.1):
- ...
- self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
- self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)
- ...
-
- def call(self, x, training, mask):
- ...
- # step 3:Layer Norml
- out1 = self.layernorm1(x + attn_output)
- # step 4:前馈网络
- ffn_output = self.ffn(out1)
- ffn_output = self.dropout2(ffn_output, training=training)
- # step 5:Layer Norml
- out2 = self.layernorm2(out1 + ffn_output)
-
- return out2
-```
-
-### 3.6 Mask 模块
-
-#### 3.6.1 什么是 Mask?
-
-- 介绍:掩盖某些值的信息,让模型信息不到该信息;
-
-#### 3.6.2 Transformer 中用到 几种 Mask?
-
-- 答案:两种
-- 类别:padding mask and sequence mask
-
-#### 3.6.3 能不能介绍一下 Transformer 中用到几种 Mask?
-
-1. padding mask
-
-- 作用域:每一个 scaled dot-product attention 中
-- 动机:输入句子的长度不一问题
-- 方法:
- - 短句子:后面 采用 0 填充
- - 长句子:只截取 左边 部分内容,其他的丢弃
-- 原因:对于 填充 的位置,其所包含的信息量 对于 模型学习 作用不大,所以 self-attention 应该 抛弃对这些位置 进行学习;
-- 做法:在这些位置上加上 一个 非常大 的负数(负无穷),使 该位置的值经过 Softmax 后,值近似 0,利用 padding mask 标记哪些值需要做处理;
-- 实现:
-```s
- # 功能: padding mask
- def create_padding_mask(seq):
- '''
- 功能: padding mask
- input:
- seq 序列
- '''
- seq = tf.cast(tf.math.equal(seq, 0), tf.float32)
- return seq[:, tf.newaxis, tf.newaxis, :]
-```
-
-2. sequence mask
-
-- 作用域:只作用于 decoder 的 self-attention 中
-- 动机:不可预测性;
-- 目标:sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。
-- 做法:
- - 产生一个下三角矩阵,上三角的值全为0,下三角全是 1。把这个矩阵作用在每一个序列上,就可以达到我们的目的
-
-
-> sequence mask 公式
-
-
-> 注意力矩阵, 每个元素 $a_{ij}$ 代表 第 i 个词和第 j 个词的内积相似度
-
-
-> 下三角矩阵,上三角的值全为0,下三角全是 1
-
-> 注:
->
-> 在 decoder 的 scaled dot-product attention 中,里面的 attn_mask = padding mask + sequence mask
->
-> 在 encoder 的 scaled dot-product attention 中,里面的 attn_mask = padding mask
-
-- 实现:
-```s
- # 功能:sequence mask
- def create_look_ahead_mask(size):
- '''
- 功能: sequence mask
- input:
- seq 序列
- '''
- mask = 1 - tf.linalg.band_part(tf.ones((size, size)), -1, 0)
- return mask
-```
-
-### 3.7 Feed forward network (FFN)
-
-#### 3.7.1 Feed forward network (FFN)的作用?
-
-答:Transformer在抛弃了 LSTM 结构后,FFN 中的激活函数成为了一个主要的提供**非线性变换的单元**。
-
-- 参考:[Transformer代码+面试细节](https://zhuanlan.zhihu.com/p/438634058)
-
-### 3.8 GELU
-
-#### 3.8.1 GELU原理?相比RELU的优点?
-
-答:
-
-- ReLU会确定性的将输入乘上一个0或者1(当x<0时乘上0,否则乘上1);
-- Dropout则是随机乘上0;
-- **GELU虽然也是将输入乘上0或1,但是输入到底是乘以0还是1,是在取决于输入自身的情况下随机选择的。**
-
-具体说明:
-
-我们将神经元的输入 x 乘上一个服从伯努利分布的 m 。而该伯努利分布又是依赖于 x 的:
-
-
-
-其中, X~N(0,1),那么 φ(x) 就是标准正态分布的累积分布函数。这么做的原因是因为神经元的输入 x 往往遵循正态分布,尤其是深度网络中普遍存在Batch Normalization的情况下。当x减小时, φ(x) 的值也会减小,此时x被“丢弃”的可能性更高。所以说这是随机依赖于输入的方式。
-
-现在,给出GELU函数的形式:
-
-
-
-其中 φ(x) 是上文提到的标准正态分布的累积分布函数。因为这个函数没有解析解,所以要用近似函数来表示。
-
-> 图像
-
-
-
-> 导数
-
-
-
-**所以,GELU的优点就是在ReLU上增加随机因素,x越小越容易被mask掉。**
-
-- 参考:[Transformer代码+面试细节](https://zhuanlan.zhihu.com/p/438634058)
-
-### 3.9 Transformer的非线性来自于哪里?
-
-FFN的gelu激活函数和self-attention,注意self-attention是非线性的(因为有相乘和softmax)。
-
-
-## 参考
-
-1. [Transformer理论源码细节详解](https://zhuanlan.zhihu.com/p/106867810)
-2. [论文笔记:Attention is all you need(Transformer)](https://zhuanlan.zhihu.com/p/51089880)
-3. [深度学习-论文阅读-Transformer-20191117](https://zhuanlan.zhihu.com/p/92234185)
-4. [Transform详解(超详细) Attention is all you need论文](https://zhuanlan.zhihu.com/p/63191028)
-5. [目前主流的attention方法都有哪些?](https://www.zhihu.com/question/68482809/answer/597944559)
-6. [transformer三部曲](https://zhuanlan.zhihu.com/p/85612521)
-7. [Transformer代码+面试细节](https://zhuanlan.zhihu.com/p/438634058)
\ No newline at end of file
diff --git a/MachineLearningAlgorithm/img/1610160500583.png b/MachineLearningAlgorithm/img/1610160500583.png
deleted file mode 100644
index 36e28d4..0000000
Binary files a/MachineLearningAlgorithm/img/1610160500583.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/1610177872501.png b/MachineLearningAlgorithm/img/1610177872501.png
deleted file mode 100644
index dac4a6e..0000000
Binary files a/MachineLearningAlgorithm/img/1610177872501.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20180404113714719.png b/MachineLearningAlgorithm/img/20180404113714719.png
deleted file mode 100644
index 214d398..0000000
Binary files a/MachineLearningAlgorithm/img/20180404113714719.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20180404135638186.png b/MachineLearningAlgorithm/img/20180404135638186.png
deleted file mode 100644
index ec7f811..0000000
Binary files a/MachineLearningAlgorithm/img/20180404135638186.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20180404150134375.png b/MachineLearningAlgorithm/img/20180404150134375.png
deleted file mode 100644
index cef86fe..0000000
Binary files a/MachineLearningAlgorithm/img/20180404150134375.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200812200223.png b/MachineLearningAlgorithm/img/20200812200223.png
deleted file mode 100644
index 0811a3d..0000000
Binary files a/MachineLearningAlgorithm/img/20200812200223.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200812200551.png b/MachineLearningAlgorithm/img/20200812200551.png
deleted file mode 100644
index deb0248..0000000
Binary files a/MachineLearningAlgorithm/img/20200812200551.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200812200740.png b/MachineLearningAlgorithm/img/20200812200740.png
deleted file mode 100644
index 525b625..0000000
Binary files a/MachineLearningAlgorithm/img/20200812200740.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200812203815.png b/MachineLearningAlgorithm/img/20200812203815.png
deleted file mode 100644
index 9677ecd..0000000
Binary files a/MachineLearningAlgorithm/img/20200812203815.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200812204613.png b/MachineLearningAlgorithm/img/20200812204613.png
deleted file mode 100644
index c762226..0000000
Binary files a/MachineLearningAlgorithm/img/20200812204613.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200906192126.png b/MachineLearningAlgorithm/img/20200906192126.png
deleted file mode 100644
index c4d6678..0000000
Binary files a/MachineLearningAlgorithm/img/20200906192126.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200906192221.png b/MachineLearningAlgorithm/img/20200906192221.png
deleted file mode 100644
index 21e2bba..0000000
Binary files a/MachineLearningAlgorithm/img/20200906192221.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20200906192249.png b/MachineLearningAlgorithm/img/20200906192249.png
deleted file mode 100644
index 22b4175..0000000
Binary files a/MachineLearningAlgorithm/img/20200906192249.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223130440.png b/MachineLearningAlgorithm/img/20201223130440.png
deleted file mode 100644
index 5bfaa76..0000000
Binary files a/MachineLearningAlgorithm/img/20201223130440.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223130525.png b/MachineLearningAlgorithm/img/20201223130525.png
deleted file mode 100644
index 8074582..0000000
Binary files a/MachineLearningAlgorithm/img/20201223130525.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223131020.png b/MachineLearningAlgorithm/img/20201223131020.png
deleted file mode 100644
index 2fd2a58..0000000
Binary files a/MachineLearningAlgorithm/img/20201223131020.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223131344.png b/MachineLearningAlgorithm/img/20201223131344.png
deleted file mode 100644
index 6f004d0..0000000
Binary files a/MachineLearningAlgorithm/img/20201223131344.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223131446.png b/MachineLearningAlgorithm/img/20201223131446.png
deleted file mode 100644
index 7e25651..0000000
Binary files a/MachineLearningAlgorithm/img/20201223131446.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223131525.png b/MachineLearningAlgorithm/img/20201223131525.png
deleted file mode 100644
index 2343744..0000000
Binary files a/MachineLearningAlgorithm/img/20201223131525.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223132028.png b/MachineLearningAlgorithm/img/20201223132028.png
deleted file mode 100644
index 7e741af..0000000
Binary files a/MachineLearningAlgorithm/img/20201223132028.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223132145.png b/MachineLearningAlgorithm/img/20201223132145.png
deleted file mode 100644
index 41f6138..0000000
Binary files a/MachineLearningAlgorithm/img/20201223132145.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223132445.png b/MachineLearningAlgorithm/img/20201223132445.png
deleted file mode 100644
index d6db901..0000000
Binary files a/MachineLearningAlgorithm/img/20201223132445.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223132538.png b/MachineLearningAlgorithm/img/20201223132538.png
deleted file mode 100644
index bf7cf1b..0000000
Binary files a/MachineLearningAlgorithm/img/20201223132538.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223135451.png b/MachineLearningAlgorithm/img/20201223135451.png
deleted file mode 100644
index 4fc276b..0000000
Binary files a/MachineLearningAlgorithm/img/20201223135451.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223135552.png b/MachineLearningAlgorithm/img/20201223135552.png
deleted file mode 100644
index a66dd30..0000000
Binary files a/MachineLearningAlgorithm/img/20201223135552.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223135720.png b/MachineLearningAlgorithm/img/20201223135720.png
deleted file mode 100644
index 2b7dc59..0000000
Binary files a/MachineLearningAlgorithm/img/20201223135720.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223135807.png b/MachineLearningAlgorithm/img/20201223135807.png
deleted file mode 100644
index 5426781..0000000
Binary files a/MachineLearningAlgorithm/img/20201223135807.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223135855.png b/MachineLearningAlgorithm/img/20201223135855.png
deleted file mode 100644
index cba1f27..0000000
Binary files a/MachineLearningAlgorithm/img/20201223135855.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223140010.png b/MachineLearningAlgorithm/img/20201223140010.png
deleted file mode 100644
index 3098a3d..0000000
Binary files a/MachineLearningAlgorithm/img/20201223140010.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223140135.png b/MachineLearningAlgorithm/img/20201223140135.png
deleted file mode 100644
index e026375..0000000
Binary files a/MachineLearningAlgorithm/img/20201223140135.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223140211.png b/MachineLearningAlgorithm/img/20201223140211.png
deleted file mode 100644
index 00db714..0000000
Binary files a/MachineLearningAlgorithm/img/20201223140211.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/20201223140304.png b/MachineLearningAlgorithm/img/20201223140304.png
deleted file mode 100644
index 717df5b..0000000
Binary files a/MachineLearningAlgorithm/img/20201223140304.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-16-19.png b/MachineLearningAlgorithm/img/2021-01-06-16-16-19.png
deleted file mode 100644
index 8572051..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-16-19.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-16-50.png b/MachineLearningAlgorithm/img/2021-01-06-16-16-50.png
deleted file mode 100644
index 5befe41..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-16-50.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-21-27.png b/MachineLearningAlgorithm/img/2021-01-06-16-21-27.png
deleted file mode 100644
index 0efa4bf..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-21-27.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-22-53.png b/MachineLearningAlgorithm/img/2021-01-06-16-22-53.png
deleted file mode 100644
index 07eb893..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-22-53.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-25-42.png b/MachineLearningAlgorithm/img/2021-01-06-16-25-42.png
deleted file mode 100644
index 0f8aff3..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-25-42.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-29-17.png b/MachineLearningAlgorithm/img/2021-01-06-16-29-17.png
deleted file mode 100644
index 4db5a05..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-29-17.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-30-53.png b/MachineLearningAlgorithm/img/2021-01-06-16-30-53.png
deleted file mode 100644
index 4c5026b..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-30-53.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/2021-01-06-16-37-37.png b/MachineLearningAlgorithm/img/2021-01-06-16-37-37.png
deleted file mode 100644
index 0c79822..0000000
Binary files a/MachineLearningAlgorithm/img/2021-01-06-16-37-37.png and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/MachineLearningAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 6a2c781..0000000
Binary files "a/MachineLearningAlgorithm/img/BN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/BatchNormvsLayerNorm.png b/MachineLearningAlgorithm/img/BatchNormvsLayerNorm.png
deleted file mode 100644
index 611891e..0000000
Binary files a/MachineLearningAlgorithm/img/BatchNormvsLayerNorm.png and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/BatchNorm\346\223\215\344\275\234.png" "b/MachineLearningAlgorithm/img/BatchNorm\346\223\215\344\275\234.png"
deleted file mode 100644
index 82245b5..0000000
Binary files "a/MachineLearningAlgorithm/img/BatchNorm\346\223\215\344\275\234.png" and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/CNN.png b/MachineLearningAlgorithm/img/CNN.png
deleted file mode 100644
index 2e96f24..0000000
Binary files a/MachineLearningAlgorithm/img/CNN.png and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" "b/MachineLearningAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png"
deleted file mode 100644
index 882606b..0000000
Binary files "a/MachineLearningAlgorithm/img/LN\345\234\250\347\245\236\347\273\217\347\275\221\347\273\234\346\226\271\345\220\221\347\244\272\346\204\217\345\233\276.png" and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/Normalization.png b/MachineLearningAlgorithm/img/Normalization.png
deleted file mode 100644
index bdda78e..0000000
Binary files a/MachineLearningAlgorithm/img/Normalization.png and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/cnn-dilation-in_7_out_3.gif b/MachineLearningAlgorithm/img/cnn-dilation-in_7_out_3.gif
deleted file mode 100644
index 98158a6..0000000
Binary files a/MachineLearningAlgorithm/img/cnn-dilation-in_7_out_3.gif and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg b/MachineLearningAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg
deleted file mode 100644
index 9d14672..0000000
Binary files a/MachineLearningAlgorithm/img/eec076b0b1aec804c74f1e9b726832a.jpg and /dev/null differ
diff --git a/MachineLearningAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg b/MachineLearningAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg
deleted file mode 100644
index a6aa05e..0000000
Binary files a/MachineLearningAlgorithm/img/pr16808o61q24973o42q7rsqq88os391.jpg and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" "b/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png"
deleted file mode 100644
index b126f64..0000000
Binary files "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" "b/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg"
deleted file mode 100644
index 354bb07..0000000
Binary files "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_1.jpg" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" "b/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg"
deleted file mode 100644
index f4d8010..0000000
Binary files "a/MachineLearningAlgorithm/img/\344\274\230\345\214\226\347\256\227\346\263\225\346\211\213\345\206\231\347\254\224\350\256\260_2.jpg" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png"
deleted file mode 100644
index 1df5ee5..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220004.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png"
deleted file mode 100644
index a65a966..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220429.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png"
deleted file mode 100644
index 881b3e2..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220549.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png"
deleted file mode 100644
index 6c42db6..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20201228220848.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004718.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004718.png"
deleted file mode 100644
index 322413d..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004718.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004807.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004807.png"
deleted file mode 100644
index 5d6ed63..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004807.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004852.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004852.png"
deleted file mode 100644
index 1a218f0..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123004852.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123165921.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123165921.png"
deleted file mode 100644
index 55f0fec..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123165921.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170106.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170106.png"
deleted file mode 100644
index 66cd739..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170106.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170726.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170726.png"
deleted file mode 100644
index 0b3757a..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210123170726.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232348.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232348.png"
deleted file mode 100644
index d17d673..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232348.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232723.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232723.png"
deleted file mode 100644
index 79e2daf..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232723.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232919.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232919.png"
deleted file mode 100644
index a7a15bb..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232919.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232945.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232945.png"
deleted file mode 100644
index 9e31a47..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203232945.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233004.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233004.png"
deleted file mode 100644
index 8ac370c..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210203233004.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210211182431.png" "b/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210211182431.png"
deleted file mode 100644
index 3dcc715..0000000
Binary files "a/MachineLearningAlgorithm/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210211182431.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" "b/MachineLearningAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png"
deleted file mode 100644
index f7f5368..0000000
Binary files "a/MachineLearningAlgorithm/img/\346\250\241\345\236\213\345\244\215\346\235\202\345\272\246\345\257\271\346\254\240\346\213\237\345\220\210\345\222\214\350\277\207\346\213\237\345\220\210\345\275\261\345\223\215.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\346\255\243\345\210\231\345\214\226.png" "b/MachineLearningAlgorithm/img/\346\255\243\345\210\231\345\214\226.png"
deleted file mode 100644
index ff8a910..0000000
Binary files "a/MachineLearningAlgorithm/img/\346\255\243\345\210\231\345\214\226.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" "b/MachineLearningAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png"
deleted file mode 100644
index 0325d90..0000000
Binary files "a/MachineLearningAlgorithm/img/\346\277\200\346\264\273\345\207\275\346\225\260.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" "b/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png"
deleted file mode 100644
index 8505602..0000000
Binary files "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_1.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" "b/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png"
deleted file mode 100644
index 6e0246a..0000000
Binary files "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_2.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" "b/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png"
deleted file mode 100644
index da180da..0000000
Binary files "a/MachineLearningAlgorithm/img/\347\273\223\346\236\204\345\214\226\351\243\216\351\231\251\346\234\200\345\260\217\345\214\226\347\220\206\350\247\243\346\255\243\345\210\231\345\214\226_3.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" "b/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png"
deleted file mode 100644
index 201909f..0000000
Binary files "a/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\345\222\214\346\254\240\346\213\237\345\220\210.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" "b/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png"
deleted file mode 100644
index 923e9db..0000000
Binary files "a/MachineLearningAlgorithm/img/\350\277\207\346\213\237\345\220\210\346\254\240\346\213\237\345\220\210\350\204\221\345\233\276.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" "b/MachineLearningAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png"
deleted file mode 100644
index 8d1b1bb..0000000
Binary files "a/MachineLearningAlgorithm/img/\351\200\273\350\276\221\345\233\236\345\275\222.png" and /dev/null differ
diff --git "a/MachineLearningAlgorithm/\346\224\257\346\214\201\345\220\221\351\207\217\346\234\272.md" "b/MachineLearningAlgorithm/\346\224\257\346\214\201\345\220\221\351\207\217\346\234\272.md"
deleted file mode 100644
index 7169cb9..0000000
--- "a/MachineLearningAlgorithm/\346\224\257\346\214\201\345\220\221\351\207\217\346\234\272.md"
+++ /dev/null
@@ -1,493 +0,0 @@
-# 【关于 支持向量机】那些你不知道的事
-
-> 作者:芙蕖
-
-
-
-## 一、原理篇
-
-### 1.1 什么是SVM?
-
-- 数学模型
-
- 支持向量机的提出基于统计学习理论和结构风险最小化准则,统计学习理论避免分类模型受样本量的限制,结构风险最小化准则避免模型训练时出现的模型问题。在这样的背景下,支持向量机技术的推广及其判别能力较强,其最终的目的是根据输入数据样本寻找到一个最优分类超平面。
-
- 支持向量机最优分类面的求解问题可转化为求数据样本分类间隔最大化的二次函数的解,关键是求得分类间隔最大值的目标解。以两类线性可分数据为例,一类数据用圆形代表,另一类数据用菱形代表,则最优分类线示例图如图1所示。
-
-
-
- 图1中, margin代表分类平面间的最大分类间隔,处于分类线两侧的数据点为待分类的样本。在该例图中,基本分类判别面方程如公式(1)所示,若对线性可分的样本集进行数据归一化处理,分类间隔表达式如公式(2)所示。
-
-
-
- 基于上述分析,通过加入有效约束条件,引入拉格朗日乘子后,解得最优分类判别函数,且其参数的确定依赖于支持向量。实际应用中,核函数结合最优分类判别面形成的支持向量机模型解决了其只处理线性可分样本的弊端,两者结合形成最终的支持向量机模型。
-
- 相应的通用支持向量机分类函数表达式如公式(3)所示。
-
-
-
- 公式(3)中, a*i和b*i是调控支持向量机确定最优分类平面的参数。
-
-- 核支持向量机
-
- 支持向量机是基于两类线性可分的样本数据发展而来,但是在实际应用中,需要识别和分类的数据大多数情况下都处于非线性不可分状态,并非理想化状态。由此,研究人员设计一个核函数应用于支持向量机的分类过程中解决该问题,其主要目的是将原低维空间中非线性不可分数据映射到高维空间中,即解决低维特征空间无法构造分类超平面的问题。支持向量机的应用性能关键在于核函数方法的选取。
-
- 核函数方法计算公式如下所示:
-
-
-
- 公式(4)表示在特征空间直接计算内积,φ代表x映射到内积特征空间的过程。
-
- 研究人员在解决不同的数据分类问题的时候需选择不同的参数,简单来说就是选择不同的核函数。核函数主要分为线性核、多项式核、Sigmoid核和Gauss径向基核。
-
- (1)**线性核**
-
-
-
- 公式(5)代表数据所处的原空间中的内积计算。其作用是统一两空间数据形式,即数据处于原空间的形式与数据经映射后所处空间的形式。
-
- (2)**多项式核**
-
-
-
- 公式(6)代表多项式空间中的内积计算,注重数据的全局性。其计算过程不同于线性核,这是由于直接在多项式空间计算会造成维数灾难,所以其计算包含一个转换过程,即从高维空间转到低维空间,利用低维空间计算其内积值。
-
- (3) **Sigmoid核**
-
-
-
- 公式(7)实现将 Sigmoid函数作为核函数,其近似为多层感知器神经网络,注重样本数据的全局最优值。
-
- (4)**Gauss径向基核(RBF)**
-
-
-
- 公式(8)可将原始特征空间映射到无穷维特征空间中,其性能好坏在于y参数的调控,局部性较强。y参数选取的值较小,映射后的特征空间近似一个低维空间;y参数选取的值较大,易造成过拟合问题.正因为其具有较强的可调控性,其在实际应用中更为广泛。
-
- 实际应用中,研究者通过权衡各个核函数的优势与劣势,通常将最佳的核函数应用于特定数据分类领域中。将上述介绍的核函数与支持向量机结合后用于实验中的Matlab 代码实现如表1所示。
-
-
-
-参考:刘方园, 王水花, 张煜东. 支持向量机模型与应用综述[J]. 计算机系统应用, 2018.
-
-#### Q.A
-
-- **那你讲一下SVM吧**。(面试题)
-
-- **讲了下SVM的推导**:hard margin, soft margin, 几何距离、函数距离,最优化,拉格朗日乘子法,对偶问题,KKT条件,损失函数,惩罚系数等。面试题)
-
- 或者直接问:**手推SVM**(面试题)
-
- 
-
- 注:手推SVM还可参考 https://blog.csdn.net/Oscar6280868/article/details/88391530
-
- https://www.cnblogs.com/hello-ai/p/11332654.html
-
- http://blog.sina.com.cn/s/blog_4298002e010144k8.html
-
-- **讲一讲SVM,知道多少说多少?为什么要用对偶问题求解?**(今日头条)(面试题)
-
- 1)首先是我们有不等式约束方程,这就需要我们写成min max的形式来得到最优解。而这种写成这种形式对x不能求导,所以我们需要转换成max min的形式,这时候,x就在里面了,这样就能对x求导了。而为了满足这种对偶变换成立,就需要满足KKT条件(KKT条件是原问题与对偶问题等价的必要条件,当原问题是凸优化问题时,变为充要条件)。
-
- 2)对偶问题将原始问题中的约束转为了对偶问题中的等式约束
-
- 3)方便核函数的引入
-
- 4)改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
-
-参考:https://www.cnblogs.com/shiyublog/p/10580603.html
-
-- **支持向量机中到底什么是支持向量,即支持向量中的向量是指什么**
-
- 支持向量本质是向量,而这些向量却起着很重要的作用,如果做分类,它们就是离分界线最近的向量。也就是说分界面是靠这些向量确定的,它们支撑着分类面。即就是离最优分类平面最近的离散点,也可以称为向量。
-
-- 既然有很多的核函数,针对具体问题该怎么选择? 如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?
-
- 对核函数的选择,现在还缺乏指导原则,各种实验的观察结果(不光是文本分类)的确表明,某些问题用某些核函数效果很好,用另一些就很差,但是一般来讲,径向基核函数(rbf)是不会出太大偏差的一种首选。(在做文本分类系统的时候,使用径向基核函数,没有参数调优的情况下,绝大部分类别的准确和召回都在85%以上,可见。虽然libSVM的作者林智仁认为文本分类用线性核函数效果更佳,待考证)
-
- 对于松弛变量来说。它是控制近似可分样本的对错分样本惩罚程度C,而这个参数没有一定的公式作参考,只能凭借经验核试验选取。
-
-参考:https://blog.csdn.net/qq_23291783/article/details/51271468
-
-
-- **SVM中惩罚参数C的理解(正则化参数对支持向量数的影响)**
-
- C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重
-
- soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了。
-
- - 当C趋于无穷大时,这个问题也就是不允许出现分类误差的样本存在,那这就是一个hard-margin SVM问题(过拟合)
- - 当C趋于0时,我们不再关注分类是否正确,只要求间隔越大越好,那么我们将无法得到有意义的解且算法不会收敛。(欠拟合)
-
-参考:https://blog.csdn.net/csdn_lzw/article/details/80185529
-
-参考:https://blog.csdn.net/abcdefg90876/article/details/105283341
-
-- **如何解决线性不可分问题?**
-
-- **高维一定线性可分?**(面试题)
-
-- **传统机器学习算法了解吗,比如XGBoost和SVM这些?**(面试题)
-
-了解。
-
-参考:https://blog.csdn.net/abcdefg90876/article/details/105283341
-
-- **SVM的核函数了解多少?**(面试题)
-
-- **SVM引入核函数本质?**(面试题)
-
- 提高维度,增加模型复杂度
-
-- **介绍下SVM以及它的核函数**(面试题)
-
-- **SVM加核函数用过吗?讲一讲其中的差别?**(今日头条)(面试题)
-
- 训练样本多,维度大就可以用核函数;如果样本少,用核函数比较容易过拟合
-
-- **SVM核函数的选择?多项式核和RBF核的关系?**(面试题)
-
-- **核函数的选择就是svm中的难点,也是核心问题(举出不同的例子?)**(面试题)
-
-- **核函数是什么?高斯核映射到无穷维是怎么回事?**(面试题)
-
-- **一个核函数都隐式定义了一个成为“再生核希尔伯特空间”的特征空间(iff条件)?**(面试题)
-
-- **SVM 中有哪些核函数?**
-- **为什么SVM要引入核函数?**
-
- 当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
-
-- **SVM核函数有哪些?**
-
- 线性(Linear)核函数:主要用于线性可分的情形。参数少,速度快。
-
- 多项式核函数
-
- 高斯(RBF)核函数:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。
-
- Sigmoid核函数
-
- 拉普拉斯(Laplac)核函数
-
-注:如果feature数量很大,跟样本数量差不多,建议使用LR或者Linear kernel的SVM。如果feature数量较少,样本数量一般,建议使用Gaussian Kernel的SVM。
-
-
-
- - **SVM在训练的时候有没有遇到hard example?**(今日头条)(面试题)
-
- SVM对hard example的应用很重要,先用一部分训练集训练一个模型,然后用剩下的一部分训练集的一部分做测试,把出错的再送入重新训练,重复二三次,效果会比较好
-
-- **函数间隔/几何间隔是什么,有什么意义?**(面试题)
-
- 相关关键词:硬间隔最大化(几何间隔)、函数间隔、学习的对偶问题、软间隔最大化(引入松弛变量)、非线性支持向量机(核技巧)、Hinge Loss(面试题)
-
- - SVM中硬间隔和软间隔
-
-硬间隔分类即线性可分支持向量机,软间隔分类即线性不可分支持向量机,利用软间隔分类时是因为存在一些训练集样本不满足函数间隔(泛函间隔)大于等于1的条件,于是加入一个非负的参数 ζ (松弛变量),让得出的函数间隔加上 ζ 满足条件。于是软间隔分类法对应的拉格朗日方程对比于硬间隔分类法的方程就多了两个参数(一个ζ ,一个 β),但是当我们求出对偶问题的方程时惊奇的发现这两种情况下的方程是一致的。下面我说下自己对这个问题的理解。
-
-我们可以先考虑软间隔分类法为什么会加入ζ 这个参数呢?硬间隔的分类法其结果容易受少数点的控制,这是很危险的,由于一定要满足函数间隔大于等于1的条件,而存在的少数离群点会让算法无法得到最优解,于是引入松弛变量,从字面就可以看出这个变量是为了缓和判定条件,所以当存在一些离群点时我们只要对应给他一个ζi,就可以在不变更最优分类超平面的情况下让这个离群点满足分类条件。
-
-综上,我们可以看出来软间隔分类法加入ζ 参数,使得最优分类超平面不会受到离群点的影响,不会向离群点靠近或远离,相当于我们去求解排除了离群点之后,样本点已经线性可分的情况下的硬间隔分类问题,所以两者的对偶问题是一致的。
-
-- **SVM为什么采用间隔最大化?**
-
-当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。
-
-感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。
-
-线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。
-
-然后应该借此阐述,几何间隔,函数间隔,及从函数间隔—>求解最小化1/2 ||w||^2 时的w和b。即线性可分支持向量机学习算法—最大间隔法的由来。
-
-- **怎么理解SVM的损失函数?**(面试题)
-
-
-- **使用高斯核函数,请描述SVM的参数C和σ对分类器的影响**(面试题)
-
-- **SVM 为什么可以处理非线性问题?**
-
-
-### 1.2 SVM怎么发展的?
-
-SVM是由模式识别中广义肖像算法(generalized portrait algorithm)发展而来的分类器,其早期工作来自前苏联学者Vladimir N. Vapnik和Alexander Y. Lerner在1963年发表的研究。1964年,Vapnik和Alexey Y. Chervonenkis对广义肖像算法进行了进一步讨论并建立了硬边距的线性SVM。此后在二十世纪70-80年代,随着模式识别中最大边距决策边界的理论研究 、基于松弛变量(slack variable)的规划问题求解技术的出现 ,和VC维(Vapnik-Chervonenkis dimension, VC dimension)的提出,SVM被逐步理论化并成为统计学习理论的一部分。1992年,Bernhard E. Boser、Isabelle M. Guyon和Vapnik通过核方法得到了非线性SVM。1995年,Corinna Cortes和Vapnik提出了软边距的非线性SVM并将其应用于手写字符识别问题,这份研究在发表后得到了关注和引用,为SVM在各领域的应用提供了参考。
-
-参考:https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fr=aladdin
-
-### 1.3 SVM存在什么问题?
-
-(1) SVM算法对大规模训练样本难以实施
-
- SVM的空间消耗主要是存储训练样本和核矩阵,由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法。
-
- 如果数据量很大,SVM的训练时间就会比较长,如垃圾邮件的分类检测,没有使用SVM分类器,而是使用了简单的naive bayes分类器,或者是使用逻辑回归模型分类。
-
-
-(2) 用SVM解决多分类问题存在困难
-
- 经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。
-
-
-(3)对缺失数据敏感,对参数和核函数的选择敏感
-
- 支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造SVM算法.目前比较成熟的核函数及其参数的选择都是人为的,根据经验来选取的,带有一定的随意性.在不同的问题领域,核函数应当具有不同的形式和参数,所以在选取时候应该将领域知识引入进来,但是目前还没有好的方法来解决核函数的选取问题.
-
-参考:https://www.cnblogs.com/hanxiaosheng/p/9908763.html
-
-(1)支持向量机算法的核心是核函数及其参数,它们的正确选取对SVM的预测及泛化性能影响很大。对于具体的研究问题,究竟选择哪种核函数并找到最优的参数对求解问题至关重要。因此,如何快速准确地选择核函数及对应的参数来满足快速性和准确性要求是迄待解决的问题。
-
-(2)在大规模及实时性要求较高的系统中,SVM算法受制于求解问题的收敛速度和系统规模的复杂程度。在非线性系统的SVM训练算法中,尤其要处理大规模数据时,需要解决样本规模和速度间的矛盾,提高训练算法的效率和精度。
-
-(3)如何有效地将二类别分类器有效地扩展到多类别问题上,多类SVM的优化设计也是今后研究的内容。
-
-(4)针对特定问题如何实现支持向量机与其他算法的融合,从而顺利解决待求问题也是需要研究的方向。
-
-(5)目前的SVM研究侧重于理论研究,真正的实践应用还有一段距离。
-
-目前, SVM仍然存在很多问题需进一步的研究,可将SVM与离散余弦变换、小波包分解、主元分析、独立分量分析﹑聚类﹑粗糙集理论等方法结合,提高应用效果并不断探索SVM新的应用领域。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-#### Q.A
-
- 1、精通svm,那你说一下svm中的难点是什么?以及你是怎么解决这个难点的?(熟悉的问法)
-
- 2、SVM 中的优化技术有哪些?
-
-## 二、算法篇
-
- 基本的支持向量机算法基本思想是在二次规划的基础上不断迭代寻找支持向量,主要有块算法、分解算法、序列最小优化算法﹑增量算法等,下面介绍这几种基本的支持向量机算法。
-
-### 2.1 什么是块算法?
-
- Chunking算法的出发点是删除矩阵中对应Lagrange乘数为零的行和列将不会影响最终的结果。对于给定的样本,Chunking算法的目标是通过某种迭代方式逐步排除非支持向量,从而降低训练过程对存储器容量的要求。具体做法是,将一个大型QP问题分解为一系列较小规模的QP问题,然后找到所有非零的Lagrange乘数并删除。在算法的每步中Chunking都解决一个QP问题,其样本为上一步所剩的具有非零Lagrange乘数的样本以及M个不满足KKT条件的最差样本。如果在某一步中,不满足KKT条件的样本数不足M个,则这些样本全部加入到新的QP问题中。每个QP子问题都采用上一个QP子问题的结果作为初始值。在算法进行到最后一步时,所有非零Lagrange乘数都被找到,从而解决了初始的大型QP问题。
-
- Chunking算法将矩阵规模从训练样本数的平方减少到具有非零Lagrange乘数的样本数的平方,在很大程度上降低了训练过程对存储容量的要求。Chunking算法能够大大提高训练速度,尤其是当支持向量的数目远远小于训练样本的数目时。然而,如果支持向量个数比较多,随着算法迭代次数的增多,所选的块也会越来越大,算法的训练速度依旧会变得十分缓慢。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-### 2.2 什么是分解算法?
-
- 分解算法最早在1997年OSUNA等人中提出,是目前有效解决大规模问题的主要方法。分解算法将二次规划问题分解成一系列规模较小的二次规划子问题,进行迭代求解。在每次迭代中,选取拉格朗日乘子分量的一个子集做为工作集,利用传统优化算法求解一个二次规划的子问题。以分类SVM为例,分解算法的主要思想是将训练样本分成工作集B和非工作集N,工作集B中的样本个数为q,q远小于训练样本总数。每次只针对工作集B中的样本进行训练,而固定N中的训练样本。该算法的关键在于选择一种最优工作集选择算法,而在工作集的选取中采用了随机的方法,因此限制了算法的收敛速度。
-
- 1998年,JOACHIMS等人在分解算法的基础上对工作集的选择做了重要改进。采用类似可行方向法的策略确定工作集B。如果存在不满足KTT条件的样本,利用最速下降法,在最速下降方向中存在q个样本,然后以这q个样本构成工作集,在该工作集上解决QP问题,直到所有样本满足KTT条件。如此改进提高了分解算法的收敛速度,并且实现了sVMlieht算法。
-
- 1998年,PLATT等人提出的序列最小优化(sequentialminimal optimization,SMO)算法是分解算法的一个特例,工作集中只有2个样本,其优点是针对2个样本的二次规划问题可以有解析解的形式,从而避免多样本情况下的数值解不稳定及耗时问题,且不需要大的矩阵存储空间,特别适合稀疏样本。工作集的选择不是传统的最陡下降法,而是启发式。通过两个嵌套的循环寻找待优化的样本,然后在内环中选择另一个样本,完成一次优化,再循环,进行下一次优化,直到全部样本都满足最优条件。SMO算法主要耗时在最优条件的判断上,所以应寻找最合理即计算代价最低的最优条件判别式。
-
- SMO算法提出后,许多学者对其进行了有效的改进。DAI等人在2005年提出了在内循环中每次优化3个变量,因为3个变量的优化问题同样可以解析求解,实验表明该算法比SMO的训练时间更短。KEERTHI和PLATT等人在迭代过程中的判优条件和循环策略上做了一定的修改,加快了算法的速度。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-### 2.3 什么是序列最小优化算法?
-
- PLATT等人在1998年提出的序列最小优化(sequential minimal optimization,SMO)算法是在分解算法的基础上发展起来的,它将工作集减少为只有2个样本。通过两个嵌套的循环寻找待优化的两个样本,外层循环主要寻找工作集的第一个样本;然后采用启发式规则选择第二个样本,选择的原则是使目标函数靠近最优点的速度达到最快;最后用解析的方法快速对选定的样本进行优化。工作集的选择采用启发式选择策略加快了算法的收敛速度,同时减小了矩阵存储空间,适合于稀疏样本。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 2.4 什么是增量算法?
-
- 增量学习是机器学习系统在处理新增样本时,能够只对原学习结果中与新样本有关的部分进行增加修改或删除操作,与之无关的部分则不被触及。增量训练算法的一个突出特点是支持向量机的学习不是一次离线进行的,而是一个数据逐一加入反复优化的过程。
-
- SYED等人在1999年最早提出了SVM增量训练算法,每次只选一小批常规二次算法能处理的数据作为增量,保留原样本中的支持向量和新增样本混合训练,直到训练样本用完。GAUWENBERGHS等人提出了增量训练的精确解,即增加一个训练样本或减少一个样本对Lagrange系数和支持向量的影响。RALAIVOLA等人提出了另一种增量式学习方法,其思想是基于高斯核的局部特性,只更新对学习机器输出影响最大的Lagrange系数,以减少计算复杂度。孔锐等人提出了一种“快速增量学习算法”,该算法依据边界向量不一定是支持向量,但支持向量一定是边界向量的原理,首先选择那些可能成为支持向量的边界向量,进行SVM的增量学习,找出支持向量,最终求出最优分类面,提高训练速度。孔波等人提出了基于中心距离比值的增量运动向量机,利用中心距离比值,在保证训练和测试准确率没有改变的情况下,提高收敛速度。李东晖等人提出了基于壳向量的线性SVM增量学习算法,通过初始样本集求得壳向量,进行SVM训练,得到支持向量集降低二次规划过程的复杂度,提高整个算法的训练速度和分类精度。
-
-
- 以上几种基本算法本质上都是将一个大规模的二次规划问题分解为小的二次规划问题,不同的是分解策略和工作集的选取方法,这也是导致算法收敛速度快慢的原因。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-
-#### Q.A
-
-
-
-## 三、其他SVM篇
-
-### 3.1 什么是最小二次支持向量机?
-
-
-
- 在求解大型QP问题时,基本支持向量机算法中的块算法和分解算法会存在维数灾难和求解速度过慢等问题,在支持向量机的求解过程中约束条件为不等式约束,为简化寻优过程并保证一定的学习速度,用等式约束来代替式(1)中的不等式约束,用最小二乘损失函数代替不敏感损失函数来简化求解过程,从而得到最小二乘支持向量机算法,如下所示:
-
-
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 3.2 什么是模糊支持向量机?
-
- 由于实际样本检测时存在不同程度的噪声,需要从样本数据中将非正常数据筛以除降低其影响。具体实施方法为:通过在训练样本数据集中增加每个样本的隶属度项,如对样本中的噪声数据和孤立点给予较小的隶属度,正常的样本赋予较大的隶属度,从而对不同的样本起到惩罚作用,降低噪声数据对分类最优平面的影响。模糊支持向量机算法结合模糊数学方法通过在基本支持向量机算法的基础上增加隶属度值对最优平面起到调节作用,提高分类精度。但样本数据中如果异常数据较多时,会影响支持向量机的泛化学习能力,另外由于增加了隶属度项,使得核函数计算复杂,训练速度降低。
-
- 为了克服噪声和野值点对支持向量机的影响,LIN等人将模糊数学和支持向量机相结合,提出了模糊支持向量机,主要用于处理训练样本中的噪声数据。其主要思想是针对支持向量机对训练样本内的噪音和孤立点的敏感性,在训练样本集中增加一项隶属度,并赋予支持向量较高的隶属度,而非支持向量及噪声野值点赋予较小的隶属度,从而降低非支持向量、噪声和野值点对最优超平面的影响。
-
- FSVM中存在的问题是如何确定隶属度值,即如何确定各个样本的权重。LIN等人提出了基于类中心的隶属度确定方法,将样本点到其类中心的距离的线性函数作为隶属度函数,但是隶属函数会严重依赖训练样本集的几何形状,降低支持向量的隶属度。HUANG和张翔等人也提出相似的隶属度确定方法。张贵香等人提出一种基于类内超平面距离的隶属度确定方法,将样本点到类内平面距离的线性函数作为隶属度函数,降低了隶属度函数对训练样本集几何形状的依赖,提高了支持向量的隶属度。李苗苗等人提出了一种新的核隶属度函数,该新的隶属度函数不仅依赖于每个样本点到类型中心的距离,还依赖于该样本点最邻近的K个其他样本点的距离。孙名松等人通过对每个样本赋予不同的双隶属度,得到最优分类器。吴青和YAN等人提出了去边缘的FSVM主要是根据训练集的几何形状,将其分成两个子集,认为其中一个子集不包含支持向量并将其舍去;另一子集包含支持向量并在该子集中进行训练,但会人为地去除一些支持向量而导致分类精度降低。针对一般模糊支持向量机训练时间过长,训练效率低下的问题,刘宏冰等人对边缘数据赋予较大的隶属度,而对类中心附近的数据赋予较小的隶属度,体现加大对容易错分样本进行惩罚的改进策略。施其权等人进一步对离分类超平面较远不可能成为支持向量的数据赋予较小的隶属度,使训练样本集中的数据大大减少。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 3.3 什么是粒度支持向量机?
-
- GSVM的主要思想是通过常用的粒度划分方法构建粒度空间获得一系列信息粒,然后在每个信息粒上进行学习,最后通过聚合信息粒上的信息(或数据、规则知识、属性等)获得最终的支持向量机决策函数。该学习机制通过数据的粒化可以将一个线性不可分问题转化为一系列线性可分问题,从而获得多个决策函数;该学习机制还使数据的泛化性能增强,即可在SVM的训练中得到间隔更宽的超平面。
-
- 原空间的GSVM模型在原空间进行粒划分,然后在核空间进行SVM学习。基于关联规则的GSVM是TANG等人提出的,其基本思想是通过RBF核函数原空间的样本映射到特征空间并展开成麦克劳林级数,并从展开式中挖掘对分类分析起重要作用的关联规则,利用这些有用的相关关联规则划分粒度,从而在SVM的分类模式中学习出关联规则分类器。基于聚类的GSVM,其基本思想是首先采用常用的聚类方法结合一定的评价规则将原始数据划分为若干个粒,然后选择其中含有较多信息量的粒参与SVM的分类或者回归,使SVM在大规模数据集的训练中能得到较高的效率和泛化能力。基于粗糙集的GSVM,其基本思想是首先用粗糙集对数据进行预处理,以达到减少冗余数据,压缩数据规模的目的,进而提高支持向量机的分类速度。基于树形层次结构的GSVM33其基本思想是根据聚类训练结果对正类数据与负类数据分别构造两棵“支持向量粒度树”,离边缘较近的继续延伸,直到达到需要的精度为止。此外,我国还有很多学者研究基于商空间(34-35]、决策树、神经网络的GSVM学习算法。
-
- GUO和王文剑等人提出的核空间的GSVM(KGSVM)模型首先将原始数据映射到核空间,然后在核空间进行粒的划分和粒的代替,最后在相同的核空间中进行粒的SVM训练。与传统的GSVM模型相比,KGSVM模型克服了核空间数据分布不一致的问题。传统的GSVM由于分粒是在原空间中进行的,粒划分时非常可能丢失大量有用的信息。但是GSVM是在核空间中进行粒的划分和替代,因此可以利用半径规则获得更好的分类精度和泛化性能。张文浩等人对KGSVM模型进行了改进,提出了核粒度下基于关联规则的GSVM。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-### 3.4 什么是多类训练算法?
-
- 随着研究问题的复杂化,现实的分类问题不单纯是正反两类,会存在多类的现象。对多分类问题需构造多类SVM分类器,主要通过目标函数和分类器来完成。对应的实现途径主要有两种:一种是通过选取合适的目标函数来实现k类分类支持向量机。由于实际问题存在多类,因而选择的目标函数变量多,求解过程复杂,一般只用于解决小型问题。另--种实现方法基于两分类器的分类思想,将多个两分类器进行组合,主要方法有一对多算法、一对一算法﹑决策导向无环图。一对多算法对k个类的样本需构造k个分类器,样本对应的决策函数最大即为所对应的类。一对一算法对k类训练样本中的任两类构造一个分类器,两两组合构造多个分类器,然后在这些分类器中使用投票法累计各个类的投票数,其中得票数最多的类即为样本点所属的类。当类别较大时组合分类器数量较多,影响分类预测速度。对此Platt等提出了一个新的学习架构:决策导向无环图。每个分类器有两类,类似于二叉树,在分类过程中由根部开始经各层中间节点逐步向叶节点分类,这种分类方法能提高支持向量机的分类速度和性能。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 3.5 什么是孪生支持向量机?
-
- JAYADCVA等人提出了一种二值数据的分类器——孪生支持向量机(又称双分界面支持向量机)。TWSVMs在形式上类似于传统的支持向量机,不仅具有传统支持向量机的优点,而且对大规模数据具有更好的处理能力。TWSVMs为两个类各自得到一个分类平面,属于每个类的数据尽量围绕在与之相对应的分类平面周围,然后TWSVMs通过优化一对分类平面来构建分类超平面。也就是说,TWSVMs需要解决一对QP问题,而SVM则是解决一个QP问题,但是在TWSVMs中,其中一个类的数据要作为另一个QP问题的约束条件,反之亦然。
-
- 尽管TWSVMs相比较于SVM具有更为快速的训练速度,但如今信息时代面临的是“数据海量,知识匮乏”,对于机器学习是一个很大的挑战,同样,对TWSVMs而言,训练速度也非常重要。尽管目前传统SVM已有许多成熟的学习算法,并且也可以推广到孪生模型,但这些算法并没有考虑到孪生模型的具体区别,因而有必要提出基于具体孪生模型的高效学习算法,以体现TWSVMs的具体特性。另外,现有的孪生模型并不具有类似于传统支持向量机的特性,即间隔。因此,如果能将孪生模型与传统支持向量的优点成功结合在一起,则可以得到既具有较快训练速度又具有较好理论基础的孪生支持向量机模型。
-
- 有了好的模型、好的算法之后,可以考虑将孪生模型推广到一些具体问题,如半监督学习问题、模糊或区间数据的学习问题、回归问题,并将该模型推广到各类实际问题,特别是生物信息学方面的应用,如基因调控网络预测。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-### 3.6 什么是排序支持向量机?
-
- 排序学习是当前信息检索和机器学习领域的热点问题,广泛应用于许多领域,包括文档检索、协同过滤、关键字提取、定义发现等等。排序学习问题大致分为基于回归的排序学习和基于分类的排序学习两类。从上面的介绍可以看出,SVM的排序学习模型可以基于分类又可以基于顺序回归,所以自RSVM 61提出以来,该排序学习方法便得到了很大的发展。
-
- RSVM在应用中大部分用于信息检索,其中最主要的问题是如何针对检索问题建立适用于具体应用的损伤函数。可以与基本的SVM一样,两类数据使用相同的代价函数;也可以针对两类数据分别建立不同的代价函数,对某些应用会大大提高排序的精确度。
-
- YAJIMA等人将RSVM用于推荐系统,文中使用1-SVM对给定数据的相关度顺序进行预测,通过使用图核处理数据集,取得了很好的效果。SVM的回归排序模型也能用于推荐系统,与传统的使用启发式的推荐系统相比,该方法在大样本下的性能是相当高效的。
-
- 在实际应用中,速度永远是人们追求的目标。传统的RSVM都是使用2-SVM进行学习,YU等人使用1-SVM学习排序,该方法可以使用更少的支持向量,大大提高训练速度。参数选择对于SVM的训练速度起着至关重要的作用,使用用于核方法的正则化路径方法可以加速RSVM中的参数选择并使该过程自动化,从而提高训练速度。在分子测序中,由于数据为结构数据,RSVM的训练速度很长,将粒度计算与RSVM结合,使用粒度计算进行属性约简和问题分割,在保证学习质量的情况下提高训练速度。
-
- 传统的RSVM在应用中有其局限性,即模型过于简单而不能用于复杂的排序;很难将先验知识加入模型中。为了克服这些局限,一种新的排序支持向量机被提出,它将一般RSVM输出的打分函数映射为一个概率sigmoid函数,该函数用交叉检验进行训练,实际上该函数就是输入数据集的后验概率,可以用其进行一些后处理的工作,避免传统RSVM的应用局限性。
-
-参考:丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-#### Q.A
-
-- SVM如何解决多分类问题(面试题)
- 或者SVM可以用来划分多类别吗? 如果可以,要怎么实现?(面试题)
-
- 一般有两种做法:
-
- 1)直接法:直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。
-
- 2)间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。
-
- - 一对多:对每个类都训练出一个分类器,由svm是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。
- - 一对一:针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。
-
-
-
-
-
-## 四、应用篇
-
-### 4.1 模式识别
-
- 在手写字体识别方面,当采用5层神经网络算法时,其识别的错误率为5.1%;贝尔实验室最先将SVM应用于手写字体识别研究,选取三种不同的核函数时,得到的误识率分别为4.0% ,4.1%和4.2%,可看出支持向量机方法比神经网络算法具有更好的分类准确性。柳回春等在SVM 的基础上结合与RBF神经网络将其用于UK心理测试自动分析系统的手写体数字识别问题。手写体识别属于多类问题。相关专家学者在研究2类问题的SVM前提下,形成了能够处理多类问题的相关SVM,其中主要核函数就是sigmoid核函数、径向基核函数、多项式核函数。不但可以支持比较其他分类和支持向量机,还能够支持比较不同形式的SVM,经过大量实践可以发现,存在很大优势。
-
- 在人脸识别方面,由于人脸图像存储和SVM训练需要大量的存储空间,周志明等人将小波变换与支持向量机相结合,由小波变换提取人脸特征,减小特征向量维数并将其输入到SVM中,并结合最近邻分类器进行分类,提高了分类器的鲁棒性和分类精度。相关学者和专家经过不断研究和分析以后形成以层次结构形式的支持向量机分类器,由一个非线性和线性支持向量机构成,上述方式不但具备比较低的误差率和比较高的检测率,还存在比较快的速度。此后,人们利用SVM方式来有效判断人脸姿态,并且合理分为6个类别,手工标定方式在多姿态人脸库中发现测试样本和训练样本集,在SVM基础上的训练集姿态分类器,可以降低到1.67%的错误率。在支持向量机和小波技术上形成的识别人脸技术,压缩提取人脸特征的时候应用小波技术,然后结合支持向量机技术和邻近分类器进行分类,确保具备比较好的鲁棒性能和分类性能。
-
- 在语音识别方面,由于背景环境中存在不同程度的噪杂声,根据支持向量机和隐式马尔可夫模型相结合的特点,忻栋等建立SVM和隐式马尔可夫模型两者相结合的混合模型,算法比较复杂,用来解决语音识别问题。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 4.2 网页分类
-
- 在中文网页分类问题上,贺海军等在网页文本的特征表示和二分类问题的基础上,把二叉决策树和SVM算法相结合构成多类分类器,实现网页文本的分类,取得了较好的分类效果和训练速度。
-
- 在网络入侵检测分类方面,网络入侵检测其实也是一种网页分类。徐文龙等提出了一种基于从特殊到特殊的直推式支持向量机,从获取的网络数据中进行归纳式学习和标记样本,从中提出特征输入到TSVM学习机中进行学习,检测其异常的网络入侵,提高了测试样本的分类准确度。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 4.3 系统建模与系统辨识
-
- 在未知非线性系统建模方面,张浩然等'利用对象的输入输出数据集,在非线性系统的控制结构设计中采用支持向量机建模来获取对象的动态特性,以SVM作为辨识器在控制器中采用指数梯度法实现控制作用。
-
- 在非线性系统的辨识方面,崔万照等将最小二乘方法应用于支持向量机算法中并选择小波函数作为支持向量机的核函数,构造最小二乘小波支持向量机来解决单输人单输出(SISO)非线性系统的辨识问题,仿真结果表明此方法能提高辨识效果,加快系统响应时间。
-
-参考:张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-### 4.4 其他
-
- 支持向量机具备一定的优越性,已经得到大量应用。专家学者提出了支持向量机基础上的水印算法,在数字水印中合理应用支持向量机,存在十分良好的应用效果。并且入侵监测系统已经是十分重要的网络安全技术之一,在分析入侵检测系统的时候,主要应用的就是SVM基础上的主动学习算法,可以在一定程度上降低学习样本,能够增加入侵监测系统整体分类性能。在处理图像中迷糊噪音的时候,依据SVM模糊推理方式形成的一种噪音检测系统,上述方式能够合理除去检测中的噪音,适当保存图像相关信息。在分析混合气体定量和多维光谱定性的时候,不能应用同一种方式来定性和定量分析组合气体吸收普线重叠、输入光谱的维数,训练样本数目有限,在分析地混合气体多维光谱的时候应用支持向量机,依据核函数有效把重叠光谱数据变为支持向量机回归模型,此时可以定量分析混合气体的组分浓度以及定性分析种类。
-
-## 五、对比篇
-
-- **SVM和LR的区别与联系?**(面试题)
-
- 或者SVM和Logistic回归的异同?(面试题)
-
-1)相同点
-
- 第一,LR和SVM都是分类算法。
-
- 看到这里很多人就不会认同了,因为在很大一部分人眼里,LR是回归算法。我是非常不赞同这一点的,因为我认为判断一个算法是分类还是回归算法的唯一标准就是样本label的类型,如果label是离散的,就是分类算法,如果label是连续的,就是回归算法。很明显,LR的训练数据的label是“0或者1”,当然是分类算法。其实这样不重要啦,暂且迁就我认为它是分类算法吧,再说了,SVM也可以回归用呢。
-
- 第二,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
-
- 这里要先说明一点,那就是LR也是可以用核函数的,至于为什么通常在SVM中运用核函数而不在LR中运用,后面讲到他们之间区别的时候会重点分析。总之,原始的LR和SVM都是线性分类器,这也是为什么通常没人问你决策树和LR什么区别,决策树和SVM什么区别,你说一个非线性分类器和一个线性分类器有什么区别?
-
- 第三,LR和SVM都是监督学习算法。
-
- 这个就不赘述什么是监督学习,什么是半监督学习,什么是非监督学习了。
-
- 第四,LR和SVM都是判别模型。
-
- 判别模型会生成一个表示P(Y|X)的判别函数(或预测模型),而生成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概率。简单来说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。或者这样理解:生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。当然,这也是为什么很少有人问你朴素贝叶斯和LR以及朴素贝叶斯和SVM有什么区别(哈哈,废话是不是太多)。
-
-2)不同点
-
- 第一,本质上是其损失函数(loss function)不同。lr的损失函数是 cross entropy loss, adaboost的损失函数是 expotional loss ,svm是hinge loss,常见的回归模型通常用 均方误差 loss。
-
- SVM 和正则化的逻辑回归它们的损失函数:
-
-
-
- 第二,支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。
-
- 第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
-
- 第四,线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。
-
- 第五,SVM的损失函数就自带正则(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因;而LR必须另外在损失函数上添加正则项。
-
-- 说LR和SVM损失函数。(面试题)
-
-- SVM框架下引入Logistic函数:输出条件后验概率?(面试题)
-
-- 感知机的对偶形式和SVM对偶形式的对比(面试题)
-
-- 为什么要用对偶形式?如何理解对偶函数的引入对计算带来的优势?(面试题)
-
-## 六、拓展篇
-
-- SVM用于回归问题:SVR(面试题)
-
-## 参考资料
-
-1.https://github.com/datawhalechina/Daily-interview/blob/master/machine-learning/SVM.md
-
-2.刘方园, 王水花, 张煜东. 支持向量机模型与应用综述[J]. 计算机系统应用, 2018.
-
-3.https://www.cnblogs.com/shiyublog/p/10580603.html
-
-4.https://blog.csdn.net/qq_23291783/article/details/51271468
-
-5.https://blog.csdn.net/csdn_lzw/article/details/80185529
-
-6.https://blog.csdn.net/abcdefg90876/article/details/105283341
-
-7.https://blog.csdn.net/abcdefg90876/article/details/105283341
-
-8.https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fr=aladdin
-
-9.https://www.cnblogs.com/hanxiaosheng/p/9908763.html
-
-10.张松兰. 支持向量机的算法及应用综述[J]. 江苏理工学院学报(2):14-17.
-
-11.丁世飞, 齐丙娟, 谭红艳. 支持向量机理论与算法研究综述[J]. 电子科技大学学报, 2011, 40(001):2-10.
-
-
diff --git "a/MachineLearningAlgorithm/\351\200\273\350\276\221\345\233\236\345\275\222.md" "b/MachineLearningAlgorithm/\351\200\273\350\276\221\345\233\236\345\275\222.md"
deleted file mode 100644
index 4782abe..0000000
--- "a/MachineLearningAlgorithm/\351\200\273\350\276\221\345\233\236\345\275\222.md"
+++ /dev/null
@@ -1,95 +0,0 @@
-# 【关于 逻辑回归】那些你不知道的事
-
-> 贡献者:姚鑫、艾春辉,芙蕖,李玲
-
-
-
-## 一、介绍篇
-
-### 1.1什么是逻辑回归
-
-LR是Logistic Regression Classifier,本质上是线性回归,特殊之处在于特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,然后使用函数g(z)作为假设函数来预测。g(z)可以将连续值映射到0 和1。逻辑回归使用的g(z)函数是sigmoid函数。因此逻辑回归=线性回归 + sigmoid。
-
-逻辑回归的表达式为
-
-$\sigma(w^Tx)=\frac{1}{1+e^{-w^Tx}}$
-
-图像
-
-
-
-### 1.2逻辑回归的优势
-
-逻辑回归的优点:
-
-1. 它是直接对分类可能性进行建模,无需实现假设数据分布,这样就避免了假设分布不准确所带来的问题;
-2. 它不是仅预测出“类别”,而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;
-3. 逻辑回归函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解。
-4. 对于线性数据,(大部分时候)逻辑回归的拟合和计算都非常快,计算效率优于SVM和随机森林
-
-## 二、推导篇
-
-### 2.1逻辑回归推导
-
-假设数据集为
-$$
-Data: {\{(x_i, y_i)\}}^{N}_{i=1} \\
-x_i\in \mathbb{R}^p,y_i\in\{0,1\}
-$$
-sigmoid函数为
-$$
-sigmoid:\sigma(z)=\frac{1}{1+e^{-z}}
-$$
-在线性回归中有
-$$
-y=w^Tx+b
-$$
-为了方便,我们将其中的权值向量$w$和输入向量$x$进行扩充,即$w=(w_1,w_2,...,w_n,b)$;$x=(x_1,x_2,...,x_n,1)$,则式(3)可以改写为$y=w^Tx$
-
-线性回归是将向量$x$映射为具体的数值$y$(连续),而逻辑回归是用来解决分类问题(通常为二分类问题),希望得到$0$或$1$的概率(区间$[0,1]$),即通过某种方式将数值$y$映射到区间$[0,1]$范围内。逻辑回归采用sigmoid函数来完成这样的映射,从而建立$y$与$x$之间的概率判别模型
-$$
-P(Y|X)
-$$
-有
-$$
-p_1=P(y=1|x)=\frac{1}{1+e^{-(w^Tx)}}
-$$
-
-$$
-p_0=P(y=0|x)=1-P(y=1|x)=\frac{e^{-(w^Tx)}}{1+e^{-(w^Tx)}}
-$$
-
-得到
-$$
-P(Y|X)=p_1^Yp_0^{1-Y},Y\in\{0,1\}
-$$
-对应的似然函数为
-$$
-\prod_{i=1}^NP(y_i|x_i)
-$$
-取对数,得到对数似然函数
-
-
-
-
-对$L(w)$求极大值(即极大似然估计),即可得到$w$的估计值
-$$
-\hat w=\mathop{\arg\max}_{w}L(w)
-$$
-
-这样,问题就变成了以对数似然函数为目标的最优化问题,可采用梯度下降法或拟牛顿法。
-
-### 2.2 求解优化
-
-令
-
-
-
-此时,
-
-
-
-因为这里是求最大值,采用梯度上升法:
-
-
-
diff --git "a/MachineLearningAlgorithm/\351\233\206\346\210\220\345\255\246\344\271\240.md" "b/MachineLearningAlgorithm/\351\233\206\346\210\220\345\255\246\344\271\240.md"
deleted file mode 100644
index 35a3dac..0000000
--- "a/MachineLearningAlgorithm/\351\233\206\346\210\220\345\255\246\344\271\240.md"
+++ /dev/null
@@ -1,279 +0,0 @@
-# 【关于 集成学习】那些你不知道的事
-
-
-
-## 一、动机
-
-不同的模型通常会在测试集上产生不同的误差;如果成员的误差是独立的,集成模型将显著地比其成员表现更好。
-
-## 二、集成学习介绍篇
-
-### 2.1 介绍篇
-
-#### 2.1.1 集成学习的基本思想是什么?
-
-结合多个学习器组合成一个性能更好的学习器
-
-#### 2.1.2 集成学习为什么有效?
-
-不同的模型通常会在测试集上产生不同的误差;如果成员的误差是独立的,集成模型将显著地比其成员表现更好。
-
-## 三、 Boosting 篇
-
-### 3.1 用一句话概括 Boosting?
-
-Boosting 应用 迭代式学习 的方式进行学习
-
-### 3.2 Boosting 的特点是什么?
-
-Boosting 分类器间存在依赖关系,基学习器之间存在依赖关系,新的学习器需要根据上一个学习器生成。
-
-### 3.3 Boosting 的基本思想是什么?
-
-- s1:先从初始训练集训练一个基学习器;初始训练集中各样本的权重是相同的;
-- s2:根据上一个基学习器的表现,调整样本权重,使分类错误的样本得到更多的关注;
-- s3:基于调整后的样本分布,训练下一个基学习器;
-- s4:测试时,对各基学习器加权得到最终结果;
-
-
-
-### 3.4 Boosting 的特点是什么?
-
-每次学习都会使用全部训练样本
-
-### 3.5 GBDT 是什么?
-
-- 思想:每一棵树学习的是之前所有树的整体预测和标签的误差;
-- 举例说明:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
-
-### 3.6 Xgboost 是什么?
-
-- 思想:不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
-
-## 四、Bagging 篇
-
-### 4.1 用一句话概括 Bagging?
-
-Bagging 应用 基于并行策略 的方式进行学习
-
-### 4.2 Bagging 的特点是什么?
-
-基学习器之间不存在依赖关系,可同时生成.
-
-### 4.3 Bagging 的基本思想是什么?
-
-- s1:利用自助采样法对训练集随机采样,重复进行 T 次;
-- s2:基于每个采样集训练一个基学习器,并得到 T 个基学习器;
-- s3:预测时,集体**投票决策****。
-
-
-
-### 4.4 Bagging 的基分类器如何选择?
-
-所用基分类器最好本身对样本分布较为敏感(不稳定性)
-
-### 4.5 Bagging 的优点 是什么?
-
-集成后分类器方差比基分类器的小
-
-### 4.6 Bagging 的特点是什么?
-
-- 训练每个基学习器时只使用一部分样本;
-- 偏好不稳定的学习器作为基学习器。
-
-> 注:所谓不稳定的学习器,指的是对样本分布较为敏感的学习器
-
-### 4.7 随机森林 是什么?
-
-- 思想:用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,对于分类算法,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。对回归问题,计算k个模型的均值作为最后的结果。
-
-## 五、 Stacking 篇
-
-### 5.1 用一句话概括 Stacking ?
-
-Stacking 应用 基于串行策略 的方式进行学习
-
-### 5.2 Stacking 的特点是什么?
-
-初级学习器与次级学习器之间存在依赖关系,初学习器的输出作为次级学习器的输入
-
-### 5.3 Stacking 的基本思路是什么?
-
-- s1:先从初始训练集训练 T 个不同的初级学习器;
-- s2:利用每个初级学习器的输出构建一个次级数据集,该数据集依然使用初始数据集的标签;
-- s3:根据新的数据集训练次级学习器;
-- s4:多级学习器的构建过程类似;
-
-## 六、常见问题篇
-
-### 6.1 为什么使用决策树作为基学习器?
-
-- (1). 决策树的表达能力和泛化能力,可以通过剪枝快速调整;
-- (2). 决策树可以方便地将**样本的权重**整合到训练过程中;(适合 Boosting 策略)
-- (3). 决策树是一种**不稳定**的学习器; (适合Bagging 策略)
- - 所谓不稳定,指的是数据样本的扰动会对决策树的结果产生较大的影响;
-- 类似问题:
- - 基学习器有什么特点?
- - 基学习器有什么要求?
-
-### 6.2 为什么不稳定的学习器更适合作为基学习器?
-
-- 不稳定的学习器容易受到样本分布的影响(方差大),很好的引入了随机性;这有助于在集成学习(特别是采用 Bagging策略)中提升模型的泛化能力。
-- 为了更好的引入随机性,有时会随机选择一个属性子集中的最优分裂属性,而不是全局最优(随机森林)
-
-### 6.3 哪些模型适合作为基学习器?
-
-- 决策树
-- 神经网络
- - 神经网络也属于不稳定的学习器;
- - 通过调整神经元的数量、网络层数,连接方式初始权重也能很好的引入随机性和改变模型的表达能力和泛化能力
-
-### 6.4 Bagging 方法中能使用线性分类器作为基学习器吗? Boosting 呢?
-
-- Bagging 方法中不推荐:
- - 线性分类器都属于稳定的学习器(方差小),对数据不敏感;
- - 甚至可能因为 Bagging 的采样,导致在训练中难以收敛,增大集成分类器的偏差
-- Boosting 方法中可以使用:
- - Boosting 方法主要通过降低偏差的方式来提升模型的性能,而线性分类器本身具有方差小的特点,所以两者有一定相性
- - XGBoost 中就支持以线性分类器作为基学习器
-
-### 6.5 Boosting/Bagging 与 偏差/方差 的关系?
-
-- 提升弱分类器性能的原因:
- - Boosting :降低了偏差
- - Bagging :降低了方差
-- Boosting 方法
- - 基本思路:减小模型的训练误差拟合残差或者加大错类的权重),加强模型的学习能力,减小偏差
- - 缺点:但 Boosting 不会显著降低方差,因为其训练过程中各基学习器是强相关的,缺少独立性。
-- Bagging 方法
- - 对 n 个独立不相关的模型预测结果取平均,方差是原来的 1/n
- - 假设所有基分类器出错的概率是独立的,超过半数基分类器出错的概率会随着基分类器的数量增加而下降
-- 泛化误差、偏差、方差、过拟合、欠拟合、模型复杂度(模型容量)的关系图
-
-
-
-## 七、对比篇
-
-### 7.1 LR vs GBDT?
-
-#### 7.1.1 从机器学习三要素的角度
-
-##### 7.1.1.1 从模型角度
-
-- 相同点:
- - 监督学习;
- - 判别模型;
- - 直接对数据的分布建模;
- - 不尝试挖掘隐含变量;
-- 不同点:
- - Logistic Regression:
- - 线性模型;
- - 分类器:线性分类器;
- - VC 维度: d+1;
- - GBDT:
- - 非线性模型;
- - boosting 模型,可以无限分类,具有无限逼近样本 VC 维的特点;
- - VC 维度:远远大于 d+1;
-
-##### 7.1.1.2 从策略角度
-
- Loss(经验风险最小化) + 正则(结构风险最小化)
-
-###### 7.1.1.2.1 从 Loss 角度
-
-- Logistic Regression:
- - 输出: y = 1 的概率;
- - Loss 损失函数:交叉熵;
- - 准则:最大熵原理,“为了追求最小分类误差,追求最大熵 Loss”;
- - 本质:分类器算法,而且对数据的噪声具有高斯假设;
-- GBDT:
- - 基分类器:CART,其无论是处理分类还是回归均是将采用回归拟合(将分类问题通过 softmax 转换为回归问题),用当前轮 CART 树拟合前一轮目标函数与实际值的负梯度 ht = -g;
- - 本质:回归算法;
-
-> 也正是因为 GBDT 采用的 CART 树模型作为基分类器进行负梯度拟合,其是一种对特征样本空间进行划分的策略,不能使用 SGD 等梯度优化算法,而是 CART 树自身的节点分裂策略:均方差(回归) 也带来了算法上的不同; GBDT 损失函数指的是前一轮拟合模型与实际值的差异,而树节点内部分裂的特征选择则是固定为 CART 的均方差,目标损失函数可以自定义,当前轮 CART 树旨在拟合负梯度。
-
-###### 7.1.1.2.2 从 特征空间 角度
-
-- Logistic Regression:
- - 特征的线性组合求交叉熵的最小化,也就是对特征的线性组合做 logistic,使得Logistic Regression会在特征空间中做线性分界面,适用于分类任务;
-- GBDT:
- - 采用 CART 树作为基分类器,其每轮树的特征拟合都是对特征空间做平行于坐标轴的空间分割,所以自带特征选择和可解释性,GBDT 即可处理分类问题也可解决回归问题,只是其统一采用回归思路进行求解(试想,如果不将分类转换为回归问题,GBDT 每轮目标函数旨在拟合上一轮组合模型的负梯度,分类信息无法求梯度,故而依旧是采用 softmax 转换为回归问题进行求解);
-
-- 相关知识
- - 线性分类器:
- - 感知器准则函数:
- - 原理:以使错分类样本到分界面距离之和最小为原则;
- - 优点:通过错分类样本提供的信息对分类器函数进行修正,这种准则是人工神经元网络多层感知器的基础;
- - SVM:
- - 基本思想:在两类线性可分条件下,所设计的分类器界面使两类之间的间隔为最大;
- - 基本出发点:使期望泛化风险尽可能小。(使用核函数可解决非线性问题)
- - Fisher 准则【线性判别分析(LDA)】:
- - 介绍:将所有样本投影到一条原点出发的直线,使得同类样本距离尽可能小,不同类样本距离尽可能大,具体为最大化“广义瑞利商”;
- - 特点:两类样本一般类内密集,类间分离;
- - 方式:寻找线性分类器最佳的法线向量方向,使两类样本在该方向上的投影满足类内尽可能密集,类间尽可能分开。这种度量通过类内离散矩阵 Sw 和类间离散矩阵 Sb 实现。
-
-###### 7.1.1.2.3 从 正则 角度
-
-- Logistic Regression:
- - 方式:采用一种约束参数稀疏的方式;
- - L2 正则整体约束权重系数的均方和,使得权重分布更均匀;
- - L1 正则则是约束权重系数绝对值和,其自带特征选择特性; -
-- GBDT:
- - 弱算法的个数T,就是迭代T轮。T的大小就影响着算法的复杂度;
- - 步长(Shrinkage)在每一轮迭代中,原来采用 $Ft(x) = F_{t-1}(x) + \alpha_{t}h_{t}(x;wt)$ 进行更新,可以加入步长v,使得一次不更新那么多:
-
-- 区别:
- - LR 采用对特征系数进行整体的限定;
- - GBDT 采用迭代的误差控制本轮参数的增长;
-
-
-
-> XGBoost的正则是在 GBDT 的基础上又添加了是一棵树里面节点的个数,以及每个树叶子节点上面输出分数的 L2 模平方。
-
-##### 7.1.1.3 从算法角度
-
-- Logistic Regression
- - 若采用 SGB, Momentum, SGD with Nesterov Acceleration 等算法,只用到了一阶导数信息,
- - 若用 AdaGrad, AdaDelta / RMSProp, Adam, Nadam, 牛顿法则用到了二阶导数信息,
-- GBDT 直接拟合上一轮组合函数的特梯度,只用到了一阶倒数信息,XGBoost 则是用到了二阶导数信息。
-
-#### 7.1.2 从特征的角度
-
-##### 7.1.2.1 特征组合
-
-- LR 特征选择方法:不具有特征组合的能力,只是一次性地寻求最大化熵的过程,对每一维的特征都假设独立,因此只具备对已有特征空间进行分割的能力,更不会对特征空间进行升维(特征组合)
-- GBDT 特征选择方法:采用最小化均方损失来寻找分裂特征及对应分裂点,所以自动会在当前根据特征 A 分裂的子树下寻求其他能使负梯度最小的其他特征 B,这样就自动具备寻求好的特征组合的性能,因此也能给出哪些特征比较重要(根据该特征被选作分裂特征的次数)。
-
-##### 7.1.2.2 特特征的稀疏性
-
-- Logistic Regression不具有特征组合的能力,并假设特征各个维度独立,因此只具有线性分界面,实际应用中,多数特征之间有相关性,只有维度特别大的稀疏数据中特征才会近似独立,所以适合应用在特征稀疏的数据上;
-- GBDT:其更适合处理稠密特征,如 GBDT+LR 的Facebook论文中,对于连续型特征导入 GBDT 做特征组合来代替一部分手工特征工程,而对于 ID 类特征的做法往往是 one-hot 之后直接传入 LR,或者先 hash,再 one-hot 传入树中进行特征工程,而目前的主流做法是直接 one-hot + embedding 来将高维稀疏特征压缩为低纬稠密特征,也进一步引入了语意信息,有利于特征的表达。
-
-#### 7.1.3 数据假设不同
-
-##### 7.1.3.1 LR
-
-- 第一个假设:假设数据服从伯努利分布。
-
-伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是 p,抛中为负面的概率是 1−p。在逻辑回归这个模型里面是假设 $h_{theta}$ 为样本为正的概率, $1-h_{theta}$ 为样本为负的概率。那么整个模型可以描述为:
-
-
-
-- 第二个假设:假设样本为正的概率是 :
-
-
-
-- 第三个假设:噪声是高斯分布的
-
-##### 7.1.3.2 GBDT
-
-未对数据做出上述假设。
-
-
-
-
-## 参考
-
-1. [机器学习面试150题:不只是考SVM xgboost 特征工程(1-50)](https://zhuanlan.zhihu.com/p/213774840)
-2. [机器学习面试150题:不只是考SVM xgboost 特征工程(51-100)](https://zhuanlan.zhihu.com/p/217494137)
-3. [GBDT 与 LR 区别总结](https://zhuanlan.zhihu.com/p/60952744)
\ No newline at end of file
diff --git "a/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080805.png" "b/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080805.png"
deleted file mode 100644
index ee1eb69..0000000
Binary files "a/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080805.png" and /dev/null differ
diff --git "a/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080923.png" "b/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080923.png"
deleted file mode 100644
index d2103c3..0000000
Binary files "a/NLPinterview/DialogueSystem/Rasa/img/\345\276\256\344\277\241\346\210\252\345\233\276_20210204080923.png" and /dev/null differ
diff --git a/NLPinterview/DialogueSystem/Rasa/init.md b/NLPinterview/DialogueSystem/Rasa/init.md
deleted file mode 100644
index bf589b7..0000000
--- a/NLPinterview/DialogueSystem/Rasa/init.md
+++ /dev/null
@@ -1,176 +0,0 @@
-# 【关于 Rasa 入门】那些你不知道的事
-
-> 作者:杨夕
->
-> 项目地址:https://github.com/km1994/nlp_paper_study
->
-> 个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。
-
-
-
-## 一、创建一个新的Rasa项目
-
-1. 第一步是创建一个新的Rasa项目。要做到这一点,运行下面的代码:
-
-```s
- rasa init --no-prompt
-```
-
-> 注:rasa init命令创建rasa项目所需的所有文件,并根据一些示例数据训练一个简单的机器人。如果你省略了——no-prompt参数,将会询问你一些关于项目设置的问题。
-
-- 运行过程
-
-```s
- $ rasa init --no-prompt
- >>>
- Welcome to Rasa! 🤖
-
- To get started quickly, an initial project will be created.
- If you need some help, check out the documentation at https://rasa.com/docs/rasa.
-
- Created project directory at '/web/workspace/yangkm/python_wp/nlu/DSWp'.
- Finished creating project structure.
- Training an initial model...
- Training Core model...
- Processed Story Blocks: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 3562.34it/s, # trackers=1]
- Processed Story Blocks: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 1523.54it/s, # trackers=5]
- Processed Story Blocks: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 380.28it/s, # trackers=20]
- Processed Story Blocks: 100%|█████████████████████████████████████████████| 5/5 [00:00<00:00, 301.26it/s, # trackers=24]
- Processed trackers: 100%|█████████████████████████████████████████████████| 5/5 [00:00<00:00, 2233.39it/s, # actions=16]
- Processed actions: 16it [00:00, 14986.35it/s, # examples=16]
- Processed trackers: 100%|█████████████████████████████████████████████| 231/231 [00:00<00:00, 899.80it/s, # actions=126]
- Epochs: 0%| | 0/100 [00:00, ?it/s]/home/amy/.conda/envs/yangkm/lib/python3.6/site-packages/rasa/utils/tensorflow/model_data.py:386: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
- final_data[k].append(np.concatenate(np.array(v)))
- Epochs: 100%|████████████████████████████████████| 100/100 [00:06<00:00, 14.77it/s, t_loss=0.083, loss=0.009, acc=1.000]
- 2020-09-17 16:46:48 INFO rasa.utils.tensorflow.models - Finished training.
- 2020-09-17 16:46:48 INFO rasa.core.agent - Persisted model to '/tmp/tmpjkpkgun2/core'
- Core model training completed.
- Training NLU model...
- 2020-09-17 16:46:48 INFO rasa.nlu.training_data.training_data - Training data stats:
- 2020-09-17 16:46:48 INFO rasa.nlu.training_data.training_data - Number of intent examples: 43 (7 distinct intents)
- 2020-09-17 16:46:48 INFO rasa.nlu.training_data.training_data - Found intents: 'mood_unhappy', 'bot_challenge', 'deny', 'affirm', 'greet', 'mood_great', 'goodbye'
- 2020-09-17 16:46:48 INFO rasa.nlu.training_data.training_data - Number of response examples: 0 (0 distinct responses)
- 2020-09-17 16:46:48 INFO rasa.nlu.training_data.training_data - Number of entity examples: 0 (0 distinct entities)
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component WhitespaceTokenizer
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component RegexFeaturizer
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component LexicalSyntacticFeaturizer
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component CountVectorsFeaturizer
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component CountVectorsFeaturizer
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:48 INFO rasa.nlu.model - Starting to train component DIETClassifier
- /home/amy/.conda/envs/yangkm/lib/python3.6/site-packages/rasa/utils/common.py:363: UserWarning: You specified 'DIET' to train entities, but no entities are present in the training data. Skip training of entities.
- Epochs: 0%| | 0/100 [00:00, ?it/s]/home/amy/.conda/envs/yangkm/lib/python3.6/site-packages/rasa/utils/tensorflow/model_data.py:386: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
- final_data[k].append(np.concatenate(np.array(v)))
- Epochs: 100%|████████████████████████████████| 100/100 [00:05<00:00, 18.36it/s, t_loss=1.475, i_loss=0.095, i_acc=1.000]
- 2020-09-17 16:46:58 INFO rasa.utils.tensorflow.models - Finished training.
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Starting to train component EntitySynonymMapper
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Starting to train component ResponseSelector
- 2020-09-17 16:46:59 INFO rasa.nlu.selectors.response_selector - Retrieval intent parameter was left to its default value. This response selector will be trained on training examples combining all retrieval intents.
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Finished training component.
- 2020-09-17 16:46:59 INFO rasa.nlu.model - Successfully saved model into '/tmp/tmpjkpkgun2/nlu'
- NLU model training completed.
- Your Rasa model is trained and saved at '/web/workspace/yangkm/python_wp/nlu/DSWp/models/20200917-164632.tar.gz'.
- If you want to speak to the assistant, run 'rasa shell' at any time inside the project directory.
-```
-
-
-## 二、Rasa 目录生成内容介绍
-
-将在该目录下参加以下文件:
-
-
-
- | 文件名称 | 作用说明 |
-
-
- | init.py | 帮助python查找操作的空文件 |
-
-
- | actions.py | 为你的自定义操作编写代码 |
-
-
- | config.yml ‘*’ | 配置NLU和Core模型 |
-
-
- | credentials.yml | 连接到其他服务的详细信息 |
-
-
- | data/nlu.md ‘*’ | 你的NLU训练数据 |
-
-
- | data/stories.md ‘*’ | 你的故事 |
-
-
- | config.yml ‘*’ | 配置NLU和Core模型 |
-
-
- | domain.yml ‘*’ | 你的助手的域 |
-
-
- | endpoints.yml | 接到fb messenger等通道的详细信息 |
-
-
- | models/.tar.gz | 你的初始模型 |
-
-
-
-> 注:最重要的文件用“*”标记。你将在本教程中了解所有这些文件。
-
-## 三、Rasa 对话系统测试
-
-```s
- $ rasa shell
- >>>
- 2021-01-30 18:01:25.946702: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
- 2021-01-30 18:01:25.946959: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
- 2021-01-30 18:01:28.518362: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library nvcuda.dll
- 2021-01-30 18:01:28.938568: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties:
- pciBusID: 0000:01:00.0 name: GeForce 940MX computeCapability: 5.0
- coreClock: 0.8605GHz coreCount: 4 deviceMemorySize: 2.00GiB deviceMemoryBandwidth: 37.33GiB/s
- 2021-01-30 18:01:28.939909: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
- 2021-01-30 18:01:28.940935: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
- 2021-01-30 18:01:28.942048: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
- 2021-01-30 18:01:28.942970: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
- 2021-01-30 18:01:28.943862: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
- 2021-01-30 18:01:28.945788: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
- 2021-01-30 18:01:28.950147: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found
- 2021-01-30 18:01:28.950220: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1753] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
- Skipping registering GPU devices...
- 2021-01-30 18:01:28 INFO rasa.model - Loading model models\20210130-175951.tar.gz...
- 2021-01-30 18:01:31 INFO root - Connecting to channel 'cmdline' which was specified by the '--connector' argument. Any other channels will be ignored. To connect to all given channels, omit the '--connector' argument.
- 2021-01-30 18:01:31 INFO root - Starting Rasa server on http://localhost:5005
- 2021-01-30 18:01:31 INFO rasa.model - Loading model models\20210130-175951.tar.gz...
- 2021-01-30 18:01:36.663436: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations: AVX2
- To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
- 2021-01-30 18:01:36.676013: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x27e2f29b300 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
- 2021-01-30 18:01:36.676366: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
- 2021-01-30 18:01:36.677138: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1257] Device interconnect StreamExecutor with strength 1 edge matrix:
- 2021-01-30 18:01:36.677640: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1263]
- 2021-01-30 18:01:45 INFO root - Rasa server is up and running.
- Bot loaded. Type a message and press enter (use '/stop' to exit):
- Your input -> hello
- Hey! How are you?
- Your input -> ok
- Great, carry on!
- Your input -> yes
- Great, carry on!
-```
-
-
-## 参考资料
-
-1. [Rasa 文档](https://rasa.com/docs/rasa/)
-2. [Rasa 安装](http://rasachatbot.com/2_Rasa_Tutorial/#rasa)
-3. [Rasa 聊天机器人中文官方文档|磐创AI](http://rasachatbot.com/)
-4. [Rasa 学习](https://blog.csdn.net/ljp1919/category_9656007.html)
-5. [rasa_chatbot_cn](https://github.com/GaoQ1/rasa_chatbot_cn)
-6. [用Rasa NLU构建自己的中文NLU系统](http://www.crownpku.com/2017/07/27/用Rasa_NLU构建自己的中文NLU系统.html)
-7. [Rasa_NLU_Chi](https://github.com/crownpku/Rasa_NLU_Chi)
-8. [_rasa_chatbot](https://github.com/zqhZY/_rasa_chatbot)
-9. [rasa 源码分析](https://www.zhihu.com/people/martis777/posts)
\ No newline at end of file
diff --git a/NLPinterview/DialogueSystem/Rasa/install.md b/NLPinterview/DialogueSystem/Rasa/install.md
deleted file mode 100644
index c303d21..0000000
--- a/NLPinterview/DialogueSystem/Rasa/install.md
+++ /dev/null
@@ -1,306 +0,0 @@
-# 【关于 Rasa安装】那些你不知道的事
-
-> 作者:杨夕
->
-> 项目地址:https://github.com/km1994/nlp_paper_study
->
-> 个人介绍:大佬们好,我叫杨夕,该项目主要是本人在研读顶会论文和复现经典论文过程中,所见、所思、所想、所闻,可能存在一些理解错误,希望大佬们多多指正。
-
-
-
-## 一、虚拟环境创建【这里默认 已安装 anaconda】
-
-### 1.1 为什么要 创建虚拟环境,不创建不好么?
-
-由于 安装 Rasa 过程中,会安装各种 乱七八糟的 依赖库(eg:tensorflow 2.0,...),导致 安装失败,所以建议 用 conda ,新建 一个 conda 环境,然后在 该环境上面开发。
-
-### 1.2 如何创建虚拟环境?
-
-- 创建环境
-```
- $ conda create -n rasa python=3.6
-```
-- 激活环境
-```
- $conda activate rasa
-```
-
-## 二、下载并安装 中文版本 的 Rasa-nlu
-
-### 2.1 为什么要 安装 Rasa-nlu?
-
-因为 Rasa-nlu 内置的版本只支持 英文版本,不支持中文版本,所以需要 安装 Rasa_NLU_Chi,使 其支持中文。
-
-### 2.2 如何安装 Rasa-nlu?
-
-1. 下载 Rasa_NLU_Chi 包【如果没梯子,建议 直接下载 zip,节约时间】
-
-```s
- $ git clone https://github.com/crownpku/Rasa_NLU_Chi.git
- $ cd rasa_nlu
-```
-
-2. 安装 python 必要包
-
-由于 Rasa_NLU_Chi 需要依赖一些包,所以需要提前安装好,避免报错。
-```s
- $ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
-```
-
-3. 安装 Rasa_NLU_Chi 包
-
-```s
- $ python setup.py install
- >>>
- Welcome to Rasa NLU!
- If any questions please visit documentation page https://nlu.rasa.com
- or join community chat on https://gitter.im/RasaHQ/rasa_nlu
-```
-> 注:若未出现其他报错信息,而且出现上述信息,则表示安装成功
-
-## 三、下载并安装 sklearn 和 jieba
-
-### 3.1 为什么要 安装 sklearn 和 jieba ?
-
-- sklearn:因为 Rasa 使用到 sklearn 一些相关 函数,所以需要提前安装,避免后期出错;
-- jieba:中文需要利用 jieba 包分词;
-
-### 3.2 如何安装 sklearn 和 jieba?
-
-```s
- $ pip install -U scikit-learn sklearn-crfsuite -i https://pypi.tuna.tsinghua.edu.cn/simple
- >>>
- ...
- Installing collected packages: threadpoolctl, tabulate, python-crfsuite, joblib, sklearn-crfsuite, scikit-learn
- Successfully installed joblib-1.0.0 python-crfsuite-0.9.7 scikit-learn-0.24.1 sklearn-crfsuite-0.3.6 tabulate-0.8.7 threadpoolctl-2.1.0
-
- $ pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
- Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
- Collecting jieba
- Downloading https://pypi.tuna.tsinghua.edu.cn/packages/c6/cb/18eeb235f833b726522d7ebed54f2278ce28ba9438e3135ab0278d9792a2/jieba-0.42.1.tar.gz (19.2 MB)
- |████████████████████████████████| 19.2 MB 504 kB/s
- Building wheels for collected packages: jieba
- Building wheel for jieba (setup.py) ... done
- Created wheel for jieba: filename=jieba-0.42.1-py3-none-any.whl size=19314477 sha256=ecc685a8bf469323e6fbaed0450debd65e934ea11ae791a9b8b9f9247405410a
- Stored in directory: c:\users\86130\appdata\local\pip\cache\wheels\de\9e\4f\5a72ec71510dfe06f9bbc96ad06077629654f87fb05766ab46
- Successfully built jieba
- Installing collected packages: jieba
- Successfully installed jieba-0.42.1
-```
-
-> 安装过程中遇到的问题
-
-- 有些包 可能会下载 错误,若出现下载错误可以尝试手动下载,以 scipy 为例 下载方法如下
-
-1. 复制一下网址到 浏览器下载
-
-```s
- Downloading https://pypi.tuna.tsinghua.edu.cn/packages/f3/9f/80522344838ae24cac9e945240436269cbb92349f7f1f4c9dfc10cb6bad5/scipy-1.5.4-cp36-cp36m-win_amd64.whl (31.2 MB)
- |█████████████████▌ | 17.1 MB 8.3 kB/s eta 0:28:23ERROR: Exception:
-```
-
-2. 通过 浏览器下载得到 scipy-1.5.4-cp36-cp36m-win_amd64.whl,执行以下命令
-
-```s
- pip install scipy-1.5.4-cp36-cp36m-win_amd64.whl
- >>>
- Processing e:\pythonwp\nlp\new\conversation_wp\rasa_study\worryfreegrocerystore\plugin\scipy-1.5.4-cp36-cp36m-win_amd64.whl
- Collecting numpy>=1.14.5
- Using cached numpy-1.19.5-cp36-cp36m-win_amd64.whl (13.2 MB)
- Installing collected packages: numpy, scipy
- Attempting uninstall: numpy
- Found existing installation: numpy 1.14.0
- Uninstalling numpy-1.14.0:
- Successfully uninstalled numpy-1.14.0
- Successfully installed numpy-1.19.5 scipy-1.5.4
-```
-
-## 四、下载并安装 MITIE 库
-
-### 4.1 为什么要 安装 MITIE 库?
-
-因为 MITIE 整合到Rasa而言,它是Rasa的few backend choices之一。它提供few pipeline components,可以同时进行意图分类和NER。两者都使用SVM并使用total_word_feature_extractor.dat来提供单个单词向量。
-
-### 4.2 Visual Studio环境、cmake、boost 等依赖包
-
-#### 4.2.1 安装Visual Studio
-
-做过C#开发的童鞋,肯定很熟悉Visual Studio,即VS。windows 的集成开发环境。安装该环境的同时,它会附带安装很全的windows的类库。后面boost库运行的时候,需要使用其中的类库。
-
-具体安装过程很简单,完全傻瓜式安装即可,下一步下一步搞定。这里提供一个下载地址:
-
-http://download.microsoft.com/download/0/7/5/0755898A-ED1B-4E11-BC04-6B9B7D82B1E4/VS2015_RTM_ULT_CHS.iso
-
-https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=15#
-
-Microsoft Visual C++ Build Tools 2015:http://go.microsoft.com/fwlink/?LinkId=691126
-
-#### 4.2.2 安装安装 cmake
-
-- 官网下载:https://cmake.org/download/
-- cmake 下载:https://github.com/Kitware/CMake/releases/download/v3.19.4/cmake-3.19.4-win64-x64.zip
-
-解压后把bin目录路径,配置到path环境变量中。 例如:D:\develop-environment\cmake-3.12.3-win64-x64\bin 执行文件为:
-
-- 验证是否安装成功
-```s
- cmake.exe
- >>>
- Usage
-
- cmake [options]
- cmake [options]
- cmake [options] -S -B
-
- Specify a source directory to (re-)generate a build system for it in the
- current working directory. Specify an existing build directory to
- re-generate its build system.
-
- Run 'cmake --help' for more information.
-
- cmake-gui.ext
-
- cmcldeps.exe
- >>>
- ninja: FATAL: Couldn't parse arguments.
- usage:
- cmcldeps