suiyuan说说
最新sora发布,让ai的热度更上一层,而我自己工作在ai相关的行业,平常也试着在使用ai提升工作效率,
也可能感觉很有必要学习这些内容,这些可能是必备的技能了
当然,大量的内容都是从网上搜寻的,自己学力有限,只能拾人牙慧了
从拟合一元一次函数说起
先记录一个视频:再讲梯度下降算法
不知道大家在中学时段有没有做过一类题目,给出,1 一组映射,2 已知是一元一次函数,让大家求出或者选择出最接近的函数。
如果映射是(1,2)分别映射(3,5),那对于这个问题,实际上就是组个二元一次方程组就可以解决了,当然,对于这组映射,聪明的人都一眼看出是y=2x+1。
如果映射是(1.0231,1.9887,4.1008)映射(2.998,5.1212,9.02323),以及不容易一眼看出的映射,这时,我们就假设这个函数是y=ax+b,然后设法求出a和b了。
那么如何求a和b呢,想想,我们的目标是找出a和b,让y=ax+b的结果和真实值差距尽可能的小,那么衡量a和b的拟合程度好坏的就是拿a和b去预测出的值和真实值之间的差距,差距越小,说明a、b就拟合的越好
那么第一时间想到的计算这个差距的方式就是将真实值和预测值相减,同时为了避免正负差值的相互抵消带来的影响,使用平方,如下所示
m可以是给出的真实数据组数,$x_i$和 $y_i$就是这些真实数据,上述函数就是关于变量a和b的函数,我们的目标是让J(a,b)的值最小,那么对于这个二次函数,可以用数学方法去寻找。
这里,我们先随机给a和b赋值,比方说a=-2,b=8,那么计算出的映射就是(5.9538,4.0026,-0.2016),和真实的结果差距较大,需要调整a和b去进一步缩小差距,
怎么去调整呢?观察函数J,为了让其值更小,需要将a向当前所在点的斜率反方向去调整,为什么?对这个二次函数来说,当一点的斜率大于0,函数值会随着自变量增加而增加,反之则减小;那么斜率大于0,a必须要减小,斜率小于0,a必须要增加,这样才能让函数J向更小的值去变化。
那么一次变化多少呢?如果太大,过了最佳的值,下次可能就会往回退,如果太小,就要经过更多的轮次才能找到最佳的值,所以这里的一次变化的大小需要谨慎设置。
如以下的公式,ξ就表示一次变化的大小,又称为步长,△J/△a ($\frac{\delta J}{\delta a}$)和△J/△b ($\frac{\delta J}{\delta b}$)分表表示函数J在这俩个变量上的斜率,减号表示相反的方向
通过以上俩个公式,结合计算结果,得知此时,a需要增加,b需要减小
经过多轮迭代后,就会让a和b的值更加接近于拟合效果更好的值
回味一下,这里例子中又a和b俩个变量,可以组成一个平面,(a,b)的变化方向,实际上就是朝着这个平面上(-△J/△a,-△J/△b) 这个向量的方向去变化的,这里可以结合梯度向量为什么是函数增加最快的方向? 这个回答里面的图像去理解下,而向量(△J/△a,△J/△b)就是梯度向量,向量(-△J/△a,-△J/△b)所指的方向,就是梯度向量的反方向。
我说的有些啰嗦,上面俩个链接里面的内容更加丰富可靠。
万里长征第一步啊
通过上面的例子,其实已经初步接触到了深度学习的一些概念,比如梯度向量(△J/△a,△J/△b),梯度下降,步长ξ,损失函数J,当然还有没接触到的,比如步长ξ在每次迭代中如何调整所涉及的优化方案,如何选取训练数据、批量/随机/小批量,等等概念就要后续渐渐学习了