矫情一下😜
第一次接触到这个课程,在满满的仪式感中开始,记录每一个时间节点
然而现实是,直播课程经常听录播,作业总是赶到最后才提交,视频学习倒是每天下班都坚持,奈何在职学习,再加上最近看房子、搬家,时间很紧张地说。一点小遗憾,相信如果时间充裕一些,我会做得更好滴,未来也会继续参加飞桨组织的课程。
学习心得
本次课程以李宏毅老师的机器学习基础课程作为理论指导,结合paddlepaddle进行同步作业实践,对于机器学习理论理解有了进一步的加深。整个过程由浅入深,从我比较熟悉的机器学习算法,到CNN,RNN,再到比较陌生的GAN,迁移学习等,收获颇丰。
个人的一点建议是:如果适当增加一点课程进度的弹性,效果可能会更好。因为作为一名在职学习者,每天只有下班的时间用于听课,做作业基本就利用周末的时间,本次课程安排每天一节,紧接着就是提交作业deadline,建议能留出一到两天时间进行作业,也可以在下一个topic开始后两天内提交这样子,保证能够有充足的时间完成作业以及追求作业水平的提升。有几次作业本可以做的更好,由于时间关系没有进一步探索尝试。
课程开始前,补了线性代数的知识,链接:https://aistudio.baidu.com/aistudio/education/group/info/2063
课程回顾
learning map:
回归
从线性回归说起,通过梯度下降优化模型参数,不断逼近使得损失函数最小对应的w
主要分三步走:
choose random ;
-
重复2.
iterate many times, might meet local minimal
we want global minimal, and Linear Regression without local minimal.
作业PM2.5的预测中,更深刻地认识到当自变量多维的情况即多个参数,学习率不同更好。
推而广之,构建模型寻找参数的过程都可以借助梯度下降转化为以上三步进行解决,不难进行手写实现,即:
模型->loss function L(f) = L(w, b) ->find best function using Gradient Descent
线性回归作业95分链接:作业1-PM2.5预测 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
梯度下降
围绕梯度下降的一些tricks
trick1: 调整学习率
Eg: 自适应梯度算法Adagrad
学习率的动态调整
trick2: Stochastic Gradient Descent
随机梯度下降,每次迭代都是随机选择一个样本计算梯度,直到收敛。
批量梯度下降需要对所有样本进行N次迭代,计算量大,时间效率低。
每一轮更新参数速度更快,但可能会收敛到局部最优。
Trick3:Feature Scaling
特征归一化
不同特征的量纲不同,导致在特征空间以二维为例,不是正圆而是椭圆。梯度下降寻找最优参数的过程与其实位置的选取很有关系,而通过特征归一化,使得特征空间为正圆形态,不管起始位置在哪个点,都会朝着圆心走。所以需要通过梯度下降进行求解的模型都需要对特征进行归一化处理,例如逻辑回归、SVM、神经网络等。而决策树通过信息增益指导树的生成,特征的量纲不同没有影响。
分类
概率生成:基于条件概率,最大似然
逻辑回归:是判别型模型,损失函数为交叉熵。
支持向量机:泛化错误率低,计算量少,仅和支持向量有关。
年收入判断作业95分链接:作业2-年收入判断 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
集成学习
深度学习:
反向传播 梯度下降 链式法则
过拟合不是深度学习的主要问题,在训练集上的正确率可能都达不到要求。
梯度衰减解决办法:更换激活函数ReLU, Adagrad, RMSProp, Momentum, Adam.
早停:根据验证集来决定train早停在什么时候。
Dropout: 每次更新参数前,每个神经元有p%被dropout,相当于每个minibatch用新网络去training,当testing时,no dropout, weight需要乘以(1-p)%, 为了使得testing和training比较match, E(testing)=Training,相当于一种ensemble.
神经网络之Fat+Short VS Thin+Tall?
Deep是一种Modularization, Fat相当于+, Tall相当于*,效果更好。
paddlepaddle作业100分链接:作业-Paddle2.0基础练习 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
CNN
CNN的设计,从图像应用出发:
一个神经元不需要看整张图,只需要寻找特定的pattern即可;
同样的pattern出现再图片中的不同区域,用于识别的神经元可以共用参数;
subsampling不会改变pixels.
CNN与DNN对比:
用卷积层替换全连接,参数要比DNN少,比DNN结构简单。
针对图片像素区域,通过卷积核对局部pattern进行操作,共享参数,类比DNN形象看:
随着卷积核从左到右移动,与第二个区域进行卷积操作,如下图所示,相同颜色线条代表相同的卷积核参数,
max pooling减少模型参数数量,有利于减少模型过拟合问题,如何反向传播?
通过图片可以一目了然,对于avg-pooling,对应位置求平均:
对于max-pooling,对应位置除最大值所在像素以外,其他位置置为0:
*图片摘自cnn 反向传播推导CNN中的反向传播chsqi的博客-CSDN博客
反卷积
如上图所示,conv之后通过padding再进行conv操作,得到右侧反卷积。
cnn基本模型的构建:图片->convolution->max pooling->convolution->max pooling->flatten->fully connected
应用:
围棋、语音辨识
CNN作业90分链接:作业3-食物图片分类 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
LSTM
lstm模型是由遗忘门、输入门、输出们、细胞记忆单元c, 隐状态h所组成的rnn网络。 经典结构图:
然而,对于网络结构和paddle接口参数、输入输出的对应关系,以及lstm和普通全连接网络的联系。
– input_size: The number of expected features in the input x(embedding后的维度)
– hidden_size: The number of features in the hidden state h(每个时间步上纵深的神经网络隐藏层如下图ht)
– num_layers: 沿depth方向的网络层数,not时间步个数
– bias
– batch_first
– dropout
– bidirectional
# 输入
– input (seq_len, batch, input_size)
– h_0 (num_layers * num_directions, batch, hidden_size)
– c_0 (num_layers * num_directions, batch, hidden_size)
# 输出
– output (seq_len, batch, num_directions * hidden_size)
– h_n (num_layers * num_directions, batch, hidden_size)
– c_n (num_layers * num_directions, batch, hidden_size)
下面这两张图有助于正确理解,对我此次学习有很大的帮助: !红线方向为经典lstm结构图的时间步方向,从绿到蓝则是传统神经网络的结构。
这张图可以看出输入输出的结构。
应用:
sequence to sequence: QA, chatbot, translation
RNN作业95分链接:作业4-语句分类 - 百度AI Studio - 人工智能学习与实训社区 (baidu.com)
迁移学习
第一次接触迁移学习
领域对抗训练模型由三部分组成,特征提取层,task predict层,领域分类层。
将无标签的test data通过特征提取层提取和train data语义相似的部分使得在domain上的准确率减少,进而可以使用task predict层对无标签test data进行预测,然而无法对其衡量准确率,只能通过domain-adversarial model对train data分类的task准确率进行衡量。
展望
通过这次学习,也认识到电子笔记的重要性,在学习过程中习惯随手记手写笔记,到最后时间有限,很多事情堆在一起,整理的笔记就是从手写笔记中摘取。可能直接记录电子笔记更好,添加相关知识点补充,进而提升电子笔记质量。💪
以上就是这一个月以来在理论方面的大致学习,在此过程中,有压力有动力,也有高兴与紧张,很难忘的一段经历,希望未来仍然有机会参加飞桨组织的学习活动。支持飞桨,点赞👍