李宏毅2020机器学习2
10. Classification
分类应用很多,例如:
Credit scoring:Input: income, savings, profession, age, …, Output: accept or refuse
Medical Diagnosis: Input: current symptoms, age, gender, …, Output: which kind of diseases
Handwritten character recognition
Face recognition: Input: image of a face, Output: persion
10.1 Generative model 生成模型
高斯分布
贝叶斯概率
极大释然估计
11. Logistic Regression
Step 1: Function Set
f
w
,
b
(
x
)
=
P
w
,
b
(
C
1
∣
x
)
=
σ
(
z
)
f_{w,b}(x)=P_{w,b}(C_1|x)=\sigma(z)
fw,b(x)=Pw,b(C1∣x)=σ(z)
σ
(
z
)
=
1
1
+
e
−
z
\sigma (z) = \frac{1}{1+e^{-z}}
σ(z)=1+e−z1
z
=
w
⋅
x
+
b
=
∑
i
w
i
x
i
+
b
z=w \cdot x + b = \sum_i w_i x_i + b
z=w⋅x+b=∑iwixi+b
sigmoid 函数默认是高斯分布
Step 2: Goodness of a Function
损失函数可以判断函数的好坏
Step 3: Find the best function
梯度下降法找最佳函数
- | Logistic Regression | Linear Regression |
---|---|---|
Step 1 | f w , b ( x ) = σ ( ∑ i w i x i + b ) Output: between 0 and 1 f_{w,b}(x)=\sigma(\sum_i w_i x_i + b) \\ \text{Output: between 0 and 1} fw,b(x)=σ(∑iwixi+b)Output: between 0 and 1 | f w , b ( x ) = ∑ i w i x i + b Output: any value f_{w,b}(x)=\sum_i w_i x_i + b \\ \text{Output: any value} fw,b(x)=∑iwixi+bOutput: any value |
Step 2 | Training data: ( x n , y ^ n ) y ^ n : 1 for class 1, 0 for class 2 L ( f ) = ∑ n C ( f ( x n ) , y ^ n ) Cross entropy: C ( f ( x n ) , y ^ n ) = − [ y ^ n ln f ( x n ) + ( 1 − y ^ n ) ln ( 1 − f ( x n ) ) ] (x^n, \hat{y}^n) \\ \hat{y}^n: \text{1 for class 1, 0 for class 2} \\ L(f)=\sum_n C(f(x^n),\hat{y}^n) \\ \text{Cross entropy:} \\ C(f(x^n),\hat{y}^n)=-[\hat{y}^n \ln f(x^n) + (1-\hat{y}^n) \ln (1-f(x^n))] (xn,y^n)y^n:1 for class 1, 0 for class 2L(f)=∑nC(f(xn),y^n)Cross entropy:C(f(xn),y^n)=−[y^nlnf(xn)+(1−y^n)ln(1−f(xn))] | Training data: ( x n , y ^ n ) y ^ n : a real number L ( f ) = 1 2 ∑ n ( f ( x n ) − y ^ n ) 2 (x^n, \hat{y}^n) \\ \hat{y}^n: \text{a real number} \\ L(f)=\frac{1}{2}\sum_n (f(x^n)-\hat{y}^n)^2 (xn,y^n)y^n:a real numberL(f)=21∑n(f(xn)−y^n)2 |
Step 3 | w i ← w i − η ∑ n − ( y ^ n − f w , b ( x n ) ) x i n w_i \leftarrow w_i - \eta \sum_n -(\hat{y}^n - f_{w,b}(x^n))x^n_i wi←wi−η∑n−(y^n−fw,b(xn))xin | w i ← w i − η ∑ n − ( y ^ n − f w , b ( x n ) ) x i n w_i \leftarrow w_i - \eta \sum_n -(\hat{y}^n - f_{w,b}(x^n))x^n_i wi←wi−η∑n−(y^n−fw,b(xn))xin |
Softmax: 输出为概率(强化大的值,使最大值辨识度更高)
1
>
y
i
>
0
∑
i
y
i
=
1
1>y_i>0 \\ \sum_i y_i = 1
1>yi>0∑iyi=1
x
→
softmax
→
y
↔
∑
i
y
^
i
ln
y
i
Cross Entropy
y
^
x \rightarrow \text{softmax} \rightarrow y \xleftrightarrow[\sum_i \hat{y}_i \ln y_i]{\text{Cross Entropy}} \hat{y}
x→softmax→yCross Entropy
∑iy^ilnyiy^
逻辑回归的限制:1. Feature Transformation(不过不容易找到好的特征转换) 2. 逻辑回归模型的级联(神经网络)
12. Deep Learning
深度学习历史:
- 1958: Perceptron (linear model,没有sigmoid部分)
- 1969:Perceptron has limitation
- 1980s: Multi-layer perceptron: Do not have significant difference from DNN today
- 1986: Backpropagation: Usually more than 3 hidden layers is not helpful
- 1989: 1 hidden layer is “good enough”, why deep?
- 2006: RBM initialization (breakthrough)(Restricted Boltzmann Machine)
- 2009: GPU
- 2011: Start to be popular in speech recognition
- 2012: win ILSVRC image competition
Neural Network: 把 Logistic Regression 前后连接到一起,每一个Logistic Regression称之为Neuron,整个称之为Neural Network;不同的连接生成不同的网络结构,例如:Fully Connect Feedforward Network、Convolutional Neural Network(CNN);一个neural network就是一个function,当neural network设置不同的参数时,就得到了一个function set
deep:有很多hidden layer;比较深的network,必须采用特殊的structure,才能进行训练。Network的运算一般使用Matrix Operation来表示,即矩阵运算,这样可以使用GPU加速
Feature Extractor: 隐藏层可以看作是一个特征提取器,可以替代手动feature engineering 或 feature transformation
决定一个好的function set很关键,即决定network的structure很关键;让机器自动寻找network structure也是可以的,不过目前还没有非常普及
13. Backpropagation
反向传播:有效计算百万维级参数的梯度;先前向传递,然后再反向传递,循环多次
链式法则:
- y = g ( x ) z = h ( y ) Δ x → Δ y → Δ z d z d x = d z d y d y d x y=g(x) \quad z=h(y) \\ \Delta x \rightarrow \Delta y \rightarrow \Delta z \\ \frac{\mathbf{d}z}{\mathbf{d}x}=\frac{\mathbf{d}z}{\mathbf{d}y}\frac{\mathbf{d}y}{\mathbf{d}x} y=g(x)z=h(y)Δx→Δy→Δzdxdz=dydzdxdy
- x = g ( s ) y = h ( s ) z = k ( x , y ) Δ s ↘ Δ y ↗ Δ x ↗ ↘ Δ z d z d s = ∂ z ∂ x d x d s + ∂ z ∂ y d y d s x=g(s) \quad y=h(s) \quad z=k(x,y)\\ {\Delta s^{\nearrow \Delta x}_{\searrow \Delta y}}^{\searrow}_{\nearrow} \Delta z \\ \frac{dz}{ds}=\frac{\partial z}{\partial x} \frac{dx}{ds}+\frac{\partial z}{\partial y} \frac{dy}{ds} x=g(s)y=h(s)z=k(x,y)Δs↘Δy↗Δx↗↘Δzdsdz=∂x∂zdsdx+∂y∂zdsdy
神经网络损失函数: L ( θ ) = ∑ n = 1 N C n ( θ ) L(\theta)=\sum_{n=1}^N C^n(\theta) L(θ)=∑n=1NCn(θ)
14. Tips for Deep Learning
- 在训练数据上结果不好:New activation function、Adaptive Learning Rate
- 在测试数据上结果不好:Early Stopping、Regularization、Dropout
Vanishing Gradient Problem: 梯度消失问题,sigmoid 激活函数可以引起该问题,因为 sigmoid 会衰减
可以使用 Rectified Linear Unit (ReLU) 代替 sigmoid,理由:1. Fast to compute 2. Biological reason 3. Infinite sigmoid with different biases 4. Vanishing gradient problem
Leaky ReLU、Parametric ReLU、Maxout : 另外几种激活函数
15. 为什么选择deep
Shallow: Fat + Short
Deep: Thin + Tall
15.1. Modularization
Deep
→
Modularization
→
Less training data
\text{Deep} \rightarrow \text{Modularization} \rightarrow \text{Less training data}
Deep→Modularization→Less training data
Modularization: Don’t put everything in your main function. The Modularization is automatically learned from data.
剪窗花例子形象说明了模块化操作
15.2. End-to-end Learning
类似于生产线
16. PyTorch 介绍
numpy的array 和 torch的tensor 几乎一模一样,不过 torch 可以自动求导;两者也可以互相转换,差别仅仅是某些keyword不一样,例如np中的axis 和 torch中的dim
参考代码
16.1. tensor.view
类似于numpy.reshape()
16.2. Broadcasting
两个向量维度不一样时,如果进行加减等操作,会自动进行广播复制
16.3. Computation graphs
pytorch的tensor比较特殊的一点是,它会自动创建一张计算图
16.4. CUDA Semantics
cuda可以在cpu和gpu之间来回拷贝tensor
16.5. PyTorch是一个自动微分框架
16.6. 梯度的使用
求得梯度后,我们就可以使用优化算法–梯度下降法了
16.7. Linear Regression
使用梯度下降法解线性回归
16.8. torch.nn.Module
16.9. Activation functions
PyTorch实现的激活函数有:ReLU, Tanh, Sigmoid
16.10. Sequential
多个简单的module串联起来,就是Sequential
16.11. Loss functions
PyTorch实现的损失函数有:MSELoss, CrossEntropyLoss
16.12. optim
PyTorch实现的基于梯度的优化器有:SGD, Adam 等
16.13. 使用PyTorch实现线性回归
16.14. 神经网络
16.15. CrossEntropyLoss
交叉熵损失函数的使用与MSELoss完全相同
17. Convolutional Neural Network
为什么用CNN处理图片?因为全连接神经网络处理图片时需要太多的参数,CNN可以简化网络结构,将全连接网络中的某些参数拿掉:
- 某些图案比整张图小,一个神经元寻找某个图案时,不需要查看整张图片,即不需要连接所有输入像素
- 不同的区域会出现相同图案,因此不同区域相同图案的多个检测器可以使用相同的参数
- 对图片抽样不改变图片描述的对象
完整CNN:图片 -> Convolution -> Max Pooling -> Convolution -> Max Pooling(卷积和池化可以重复很多次) -> Flatten -> Fully Connected Feedforward network -> cat or dog
Convolution: 许多个图案过滤器,每一个过滤器是一个矩阵,矩阵的值是网络的参数,它们是被学习出来的,并不是人设计的;每一个过滤器会得到一个特征图;对于彩色图片,卷积核为立方体,每一个通道并不是分开来算,而是和在一起来算;
卷积:较少的参数,且共享权重
Max Pooling: 多个值合成一个值,可以是平均值,也可以是最大值
一个图片经过Conv, MaxPooling后,就变成一个新的、小的图片,每一个过滤器是一个通道
Flatten: Feature Map拉直
假设第k个过滤器的输出是11x11矩阵,
Degree of the activation of the k-th filter:
a
k
=
∑
i
=
1
11
∑
j
=
1
11
a
i
j
k
a^k=\sum_{i=1}^{11}\sum_{j=1}^{11} a^k_{ij}
ak=∑i=111∑j=111aijk
x
∗
=
arg
max
a
k
x^*=\text{arg} \max a^k
x∗=argmaxak (gradient ascent)
模型训练好之后,可以通过该方法查看每一个filter对什么图形特征最敏感
18. Graph Neural Network
- Introduction
- Roadmap
- Tasks, Dataset, and Benchmark
- Spatial-based GNN
- Graph Signal Processing and Spectral-based GNN
- Graph Generation
- GNN for NLP