深度学习入门 (Datawhale X 李宏毅苹果书 AI夏令营)
Youtube Channel ---------- http://www.youtube.com/c/HungyiLeeNTU
Task1
相关概念
Regression
找一个函数F,输入预测相关数值的指数,F 能做到输出最终预测结果(数值 scalar)。
Classification
从设定好的选项中选择一个当作输出,这些选项叫做options (classes)。
e.g. Playing go(阿尔法go)就是一个Classification, 它需要在19*19classes中选择正确的选项(下一步落子位置)。
Structure Learning
Create something with structure (image, document)
机器现在不止需要做选择,或输出数值;
机器现在需要学会画图,写文章…… ----> 让它学会创造这件事。
如何寻找预测结果呢?------ 分3步
以youtube浏览量举例 ------------------- 预测本频道观看人数
找到含有未知参数的函数-Fuction with Unknown Parameters
-
y = b + wx1 (Model)
(feature) y: no.of views on 8/26, x1: no.of views on 8/25
w(weight) and b(bias) are unknown parameters (learned from data)
找到Loss-Define Loss from Training Data
Loss is a function of parameters L(b, w) ; Loss是一个输入Model参数的方程
Loss: how good a set of value is.
e.g. L (0.5k, 1) y = b + wx1 = ------> y = 0.5k + 1x1
How good it is? -------> 计算Loss
label ---- 正确的数值(真实的)
三种方式计算e
平均绝对误差MAE /
均方误差MSE /
Cross-entropy交叉熵
等高线图 根据Loss画出的等高线图叫做 Error Surface
Small L 更接近good值,在圆圈中心位置得到最佳Loss(w接近1,b 100多)
----->
前一天的点赞数 差不多等于 后一天的点赞数
解最佳化问题-Optimization
w*, b* = arg minw,b L ----------> 找到最佳的一组w, b 使得Loss值最小
如何做?
Gradient Descent
先假设只有w参数,随机选择w的初始值w0;
计算w0的微分(也就是w0这个位置的斜率)
斜率为正,w值减小;斜率为负,w值增大。
------> 也就是说,画切线;哪边低往,往哪边移。
那么,又有一个问题产生了,移动多少呢?
斜率大,移动多一些;斜率小,移动少一些。
hyperparameters 是指 需要自己设定的值 <---- 在这里 learning rate是 hp
注:为什么出现负值?
因为Loss的这个方程是自己定义的,那么它就有可能出现任何形状;在真实情况中,如果定义了loss是预测值与正确值相减的绝对值(MAE)的话,就不会出现负数的情况。
4. 持续更新w的位置,直到停止;
停止的情况有两种:
更新的次数(自己设定的值-hyperparameters)到达上限(比如100万次);
w的微分结果 刚好为 0;
明明到global才是Loss的最小值,但这个图很大概率会在local点停止更新。
会出现 local minima / global minima 的问题?
-----> 但 它是一个假命题?Why?(留下疑问)
现在假设有w,b两个参数
将求w*的步骤推广到求w*, b*即可。
最后在这个真实案例中,计算的结果如下:
我们用已知的值去做函数的预测 ——> training data
那么unseen during training呢? 会发现Loss值变大了(没有那么good)
我们发现 预测值 几乎就是 正确值 的右移。
如果我们想要去解决 一个周期的预测 该如何做呢?
左边这几个 y = b + wx1 有一个共同的名字 叫做 Linear models
<------ 接下来,我们看如何让Linear models更好。
Task2
Linear models are too simple… we need more sophisticated modes.
y 与 x 的关系不只是正比关系吧。。。那么我们需要去考虑当 y 到峰值时,y 与 x 之间的关系就存在着一种转换,将其转换为反比关系。
We need a more flexible model !
如何写出更复杂的、有未知参数的函数呢?
在下图中,red curve 会等于 常数+全部 blue curve 相加
------> red curve = 常数 + 0+1+2+3 ;
注:从红色曲线的转折点,蓝色曲线设定与红色曲线相同的斜率。
Piecewise Linear Curves ====> 有多条线段所组成的(e.g. 红色的这条线);
意味着 More pieces require more blue curve.
=====> 也就意味着说,
我们只要有足够多的 blue curves,那么就可以变成任意连续的曲线。
如何表示出 blue curves 函数呢?- How to represent this function?
我们用曲线的方式来逼近它。
Sigmoid Function(S型)
当 -(b+wx1) 无穷小时,y 收敛于 c; 当 -(b+wx1) 无穷大时,y 收敛于 0;
-------> 所以我说,高数很重要呐,捡起来吧。
修改不同的 c / b / w 即可得到不同的 blue curves 。
所以整体的步骤是这样的:
blue curves(different Sigmoid function)
----> Piecewise Linear Function
----> Continues function
那么,我们可以得到上面图的结论:
New Model (More Features) 诞生!
上面是 y = 一个方程 ; 下面是 y = 多个方程相加 ;
线性代数 don't forget!
CT -----> C的转置
Questions:
-
暴搜 ------ 在参数巨多的时候 打咩!
-
sigmoid 方程可以有很多很多个 (fat fat fat)
解最佳化问题-Optimization
依旧是 Gradient Descent
注意区分:
每 更新 一次参数 -----> update
把所有batch看过一遍 -----> epoch
更新多少次 其实取决于 它的 batch size。
Rectified Linear Unit ( ReLU )
注意 ReLU 和 sigmoid function 的区别
Actually, ReLU 更好!
一直 fat 一定会达到最低的loss下限; 那么如何变得更好呢?
多做几遍 我们刚才做的事情? <------ hyperparameters ;
Fancy name!
Neural Network <------- 已“臭名昭著” ---------> 所以现在叫 “Deep Learning“
Neural Network, which mimics human brain…….
Many layers means Deep! =====> 那么我们把它多加 几层( layer )这件事 就是 deep!
DEEP? OR FAT? why we choose DEEP? ------- 小悬念
3 和 4 层对于未知事物的预测,居然 4层 更不好?why?
---------> Overfitting 过拟合
---------> 在训练过的资料上结果有变好,但在没看过的资料上没有变好
老师卖关子啦!骗我们去点影片啦!
大家在2.26都去点video看,让2.26的机器预测完全不准!
(1、4layer更准,但整体都不准)
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
老师太风趣啦!
Task3
Training data ----> 训练 model (3步)
Testing data ----> 输入 x,测试输出的结果y;上传Kaggle
输入不同的 x ,输出不同的 y
Speech Recognition / Image Recognition / Speaker Recognition / Machine Translation
Kaggle 结果不满意的话,这样做。
训练 Model 步骤
Model Bias V.S. Optimization Issue
Function set 的范围还不够大,以至于没有包含进能够让你的 loss 变小的 function
----> Model Bias
<---- 解决方式 Deep learning / More features (上一节)
注意 Training data 和 Testing data 的 loss 来区分到底是什么问题。
在 Training data 中,更深层的 networks 没办法比浅层的 networks 的loss值更低,这就意味着 既不是 Overfitting 的问题,也不是Model Bias(弹性小)的问题
----> 就是 优化 的问题
<---- 问题所在:卡在local minima,gradient decent不给力 (解决方式 下一节)
在 Training data 中的 loss 低,但在 Testing data 中的 loss 高
----> 就是 Overfitting 的问题 (数学原理 下下节)
Why Overfitting?
An extreme example(极端案例)
一无是处的 方程!
输入的 x 又出现在training data中,就能输出 y;不然就 随机输出一个值 ---->意味着这个training什么也没做,方程什么也没学到
但,它在 training data 中的 loss 可达到 0 ;可是,在 testing data 中 loss 会变得很大。
问题所在:
在这张图中,training data 随机 sample 出来3个点,导致没有被 training data 覆盖的地方会出现 “freestyle” , 这时如果 testing data 刚好未被训练资料所覆盖,就会导致 Large loss。
How to address? ---- 两种方式
第一种 在训练资料上动手脚。
More training data (作业cannot do)
寻找更多的资料
Data augmentation
需要根据 资料特性 以及 现在处理问题的理解 来选择合适的 augmentation。
比如说,
影像识别; 第一张为原图,第二张左右颠倒,第三张放大。这些都是在现实中有可能出现的、合理的 data augmentation 的做法。
但最后一张上下颠倒,很少出现且不合理;这会导致机器学到一些奇怪的东西。
Constrained model 第二种 限制模型,让它不要有那么大的弹性
假设我们的model一定是 二次曲线,这样function的形状就会受到很大的限制。
因为它只能是一下这些图形的样式。
减少参数 / 共享参数(CNN)
我们之前讲的是 Fully-connected network,是弹性比较大的networks。
而 CNN 是一个比较有限制(比较没有弹性)的架构;它可以针对影像的特性来限制模型的弹性,所以它在影像上会做得比较好。 CNN形成的集合会比较小,是包含在 Fully-connected network 中的。
Less features(运用得比较少)
Early stopping
Regularization
Dropout
但,也不能给模型太多的限制。
----> 比如说,一条直线(一次函数),机器找不到一条直线能刚好通过training data 的3个点。证明你的 function set 中根本包含能让 loss 变小的 function。
就 又回到了 Model Bias 的问题。。。
Bias-Complexity Trade-off
随着模型复杂度越来越高,training loss 越来越低;随着模型复杂度越来越高,testing loss 先降低后升高。
----> 复杂到一定程度,出现overfitting。
那么。。。我们选择一个 中庸 的模型?
Testing Set
public Testing Set / private Testing Set
上图向我们展示了,Training Set训练出来的Model3是最低的,但它也有可能对应着一个很废的Model(fk(x)),那么这样即使 public Testing Set 是好的,也不意味着它在private Testing Set 会变好。
一直用 public Testing Set 训练很废的模型是没有意义的,因为在 private Testing Set 中不会得到好的结果。
----> 少去看 public Testing Set(可以完全不看,直接用 Training data 去调)。
Best做题方式 ---- N-fold Cross Validation
看3种模型的 Avg mse 谁低,再把它用在 Training Set 上,最后训练出来的模型 再运用到 Testing Set上。