前期学过吴恩达的深度学习和李沐的pytorch,偶然看到李宏毅的机器学习讲的宝可梦二次元感觉很有趣,正好补充下机器学习知识顺便复习下基本概念,打算看完了。
机器学习任务分三类
- Regression,回归问题(输出一个未知的预测值,例如预测概率的问题。)
- Classification,分类问题(输出一个在标准库中已有的值,例如二分类或者多分类问题)
- Structured learning,结构学习(输出为一个有结构的内容,如一张图画、一段文字)
机器学习任务的设计步骤
- y=wx+b,列出一个带有未知量w,b的函数(设计模型)
不一定是线性的 - 定义损失函数Loss(定义计算误差的函数)
目前看到均方差比较多 - Optimization 优化(梯度下降法,优化参数)
梯度下降的学习率l是自己设置的超参数,l越大每次梯度下降的跨度就越大
1.模型的设计
y=b+wx 能表示一条直线,我们如何去表示一条折线或者曲线呢?
红色的折线可以由一些蓝色的折线相加来表示,我们用sigmoid函数来近似蓝色的折线。(改变w,b,c sigmoid函数会出现如下图所示的变化)
多特征输入
把上面的单特征输入
换成多特征输入
就变成了一个简单的神经网络
可以用矩阵乘法去求解
最后设计的模型如下
即y=b+wx变成了如下方程
2.定义损失函数Loss
它这里的损失函数定义的比较简单
3.梯度下降
找到一组w,b,c使Loss越小越好,这里把w,b,c统一写在一个θ向量里
小批量梯度下降
数据量太大(特征太多)的情况下,可以把数据分批计算梯度进行梯度下降,把所有batch都算完叫1个epoch,实际训练中epoch算超参数要自己设置
RuLU
RuLU可以替换sigmoid函数,具体选择哪个根据实际项目需求,本课程后续案例选择用RuLU
留下的问题
目前的神经网络越做越深,取名deep learning
问题:只要用足够多的ReLU或者sigmoid理论上就可以逼近任何函数,为什么还要把网络做的够深?
加宽和加深都可以提升网络的复杂度,参考下面下面博主,大意是实验结果表明加深比较好。
https://blog.csdn.net/u013510838/article/details/108296861