加载中…
个人资料
用户6484143224
用户6484143224
  • 博客等级:
  • 博客积分:0
  • 博客访问:69
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

C#去梯度下降算法解决一个从0.8到0,以及从0.8到1的一个学习过程。。。

(2018-11-29 14:28:45)
标签:

it

人工智能

举个例子严格来说,让一个数据集(1,0.8),怎么通过调节权重和偏置最终输出接近于(1,0),或者(1,1),这里面会用到二次代价函数,以及偏导数来解决。。网上有很多的推导公式,这里就不做推导了,我们怎么样去用这些二次代价函数,导数,偏导数,在程序中去解决一个数据集。(咱们先不考虑激活函数,因为激活函数加进去,你发现它的梯度消失的很严重,解决梯度消失,我们这里不考虑,你可以网上找到它的答案)然后进行训练以接近最终的结果,进而你能够理解多个数据集的含义,我们只解决一个数据集。
double y = 0.8;
double x = 1;

//初始化权重,偏置,这个你可以随机一个,但是呢,我们想一目了然,所以给定一个值。
double w = 0.6;
double b = 0.2;

//那么也就是说,上面的参数给定。。。下面这个公式是成立的。(0.8 = 0.6 * 1 +0.2)
y = w*x +b;

怎么样让y经过梯度下降算法,调整w和b的值,从0.8变化最终生成或者接近0,你可能会说很简单啊。不断的减小w和b的值,y的值就会变小,一直调整,最终y的值会慢慢接近于0。没错,就是这么做的,这个不断的缩小的过程就是学习过程。
我们这里要说的是怎么样运用先辈推导出来的二次代价函数,以及导数,偏导数去解释和解决这个问题,在他们眼里是如何看待的。进而你能够理解他们为什么去做这个事情。

假设我们的期望值 yq = 0;
先辈推导出来的二次代价函数是这个鬼样子。。。

è¿éåå¾çæè¿°

因为我的数据集只有一个,就是m = 1
那么代价函数 C = ((y-yq) * (y-yq))/2;
那么接下来就是求这个代价函数的偏导数,这个偏导数有什么屌用,偏导数就是上面我们说的对w,b减小的方位,往哪儿减小,减少多少,这个代价函数C就是保证它最小的时候,w和b的取值,它是二次函数,必然是一个曲线图了,最小值就是最低点。那么他的偏导数已经推导出来了,就是这个鬼样子。

è¿éåå¾çæè¿°
这个是w偏导数
b的偏导数。把后面的x后面的一坨去掉就是。。
那么也就是综上所述。。。

w偏导数套入这个公式哈,m是个数。。。就一个数据集所以是1
wp = -(yq-y)*x;
b偏导数呢
bp = - (yq-y);
那么最终每一步w的缩小的范围就是
我们给它加上一个学习率0.1。。
那么他的变化过程就是这个公式。。
w -= wp * 0.1;
b -= bp * 0.1;
套入一个循环不断的输出。w,b的值,然后在套入代价函数,输出代价误差。。直到代价误差输出为最小,或者趋近于0.那么这个对w,b的值就是最合适的值。
输出当前y的值,是不是不断接近于0。

这只是一个比较简单的例子,用来说明这些个代价函数,列了一堆公式,求偏导数,他们到底是干么用的。。以及如何在程序当中去用它,这只是二次代价函数。你也看到了它的问题所在。那就是处理的问题太规则了。很多时候,我们的数据集很多时候不是一个,并且是很不规则的,很多时候不是一个规则的曲线。。。你不能很快找到最低点,或者你找到的最低点未必是误差最低的点。它有多个最低点。那么我们使用交叉熵代价函数。。说白了就是比对你们的商。交叉比对。找到最低点,不管你们的代价函数曲线多少个最低点。我都可以比对的出来。这个点就是全局代价函数的最低值。



0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有