请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

<思考>关于theta随机取值

在计算自己编写的随机梯度下降和老师编写的随机梯度下降的效率时,我发现了一个问题。

我设计了一个for循环,来测试多次准确度

#准备工作
from nike.LinearRegression import LinearRegression
from nike.LinearRegression import LinearRegression2
lin_reg1 = LinearRegression()
lin_reg2 = LinearRegression2()

模块一

t=0
for i in range(10):
    lin_reg1.fit_sgd(X_train_standand,y_train,n_iters=5)
    t=lin_reg1.score(X_test_standand, y_test)+t
t
#-126.284953840674

模块二

t=0
for i in range(10):
    lin_reg2.fit_sgd(X_train_standand,y_train,n_iters=5)
    t=lin_reg2.score(X_test_standand, y_test)+t
t
#6.513431041464907

这俩就是把多次计算R2score的值加起来,我自己编写的经常能取到负的值,有时候会很大很大,我试着把n_iters调大,稳定了很多,但还是会偶尔出现负值。在我一条条复制排除后我发现问题出现在了这一句
 # 随机化系数
 initial_theta = np.array(np.random.randint(1, 100, X_b.shape[1]))
 initial_theta = np.random.randn(X_b.shape[1])

二者之间差别很大的地方在,我的theta随机在1-100之间,而老师的theta随机在0-1之间,我认真思考了我认为可能是有些theta,随机到100,而正确值为1,需要运行很多次,才能接近准确的值,但我的n_iters没有到位,导致准确率差强人意,所以在提高循环次数后更加地稳定了。


这时候我想不明白的地方就来了,随机梯度下降,是先对X_b,y乱序处理,然后取一串值计算我梯度下降的方向,那么对于两种极端的数据,一种随机到的真实值值差不多(0.5 ,0.55),一种和随机到的真实值值差很多(0.6, 100),在我多次循环遍历后,可能会是这样的结果:(0.545, 0.5),(26.5 , 100)。这样结束程序之后,R2score的值肯定不大理想。

在theta个别初始值与真实值差距过大,难道只能提高n_iters的次数,有其他更好的办法吗?(比如能不能根据不同数据改变学习率,或将真假数据之间的差距小的删掉,不纳入下次循环)

正在回答

插入代码

1回答

liuyubobobo 2022-08-26 03:36:05

首先,n_iters 是一个绕不开的“超参数”。这是因为大多数“稍微复杂一些”的机器学习算法(更不用提特别复杂的机器学习算法,比如深度学习),其最优化的式子都没有数学解,只能搜索解。一旦要搜索解,就有搜索多少步的问题。


前几天课程问答区还有同学提问,就是这个课程中使用的数据(这个课程的数据都极度简单,只为了说明原理),使用 sklearn 中的算法的默认参数,还会提示结果没有收敛,建议增大迭代次数的情况。可以参考这里:https://coding.imooc.com/learn/questiondetail/nlz2pX1AZZ0XaG4Q.html


你看到很多论文也好,业界的成果也好,老说我们为了训练一个模型,用了多少 GPU,算了多少个礼拜,烧了多少钱。在干啥呢?其实就是在迭代求解这个模型背后的那个最优化的函数。当模型非常复杂,参数数量非常多的时候,迭代的次数也随之急速上涨。(比如 GPT-3 有 1750 亿个参数,而 GPT-4 的参数规模可能会达到 10 兆。)


==========


但即使 n_iters 是一个绕不开的参数,依然有一些方法,可以尽量降低 n_iters,更快地让计算机找到问题的解。其实,在最近你问的很多问题,都触及到了这些方法(的思路或者方向)。


比如在这个问题中提到的对数据做标准化:http://coding.imooc.com/learn/questiondetail/274363.html

实际上,不仅仅是标准化,对数据做预处理本身,就是不仅仅可以提高算法的准确率,还能提高算法速度的。所以特征工程是非常重要的。关于特征工程的讨论,可以参考这里:http://coding.imooc.com/learn/questiondetail/ZEgyveP0ABBYBk7V.html


再比如在这个问题中提到的算法内部的计算原理(从梯度的计算,到学习率的自适应):http://coding.imooc.com/learn/questiondetail/274503.html


针对很多具体的算法,或者是具体的领域,还有很多非常 specific 的方法。比如如果你去学习深度学习,一般深度学习的资料,都会对这些问题做一些讨论;或者你去学习某个具体领域,无论是图像识别,还是 nlp,也都会根据领域知识,给出一些建议,如何使用,调整,设立这些模型,使得计算的过程“又快又好”。


大赞一下思考!


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 黄义舜 #1
    ||bobo老师觉得机器学习将来的发展方向是,能收集更多的数据,数据特征,或者自动获取数据,在线获取数据?
    
    ||还是发展算法,发展到类似人脑的复杂算法,仅仅通过很少量数据达到高准确率的方式?
    
    ||(这个问题其实是前面您课件里讨论的《算法为王》还是《数据为王》的问题,看到这个特征工程讨论的这篇文档,我就突然想起这个问题了)
    
    ||(以我小小的眼界来看,两个方向侧重不同,数据方向似乎是一种更"务实"选择,但我认为发展算法的高级性才能产生质的飞跃)
    回复 有任何疑惑可以回复我~ 2022-08-26 19:42:12
  • 提问者 黄义舜 #2
    这个问题是八天前的,现在我看起来似乎和某些东西连起来了(我觉得和,1.梯度下降在取到局部最优解,需要进行多次随机;2.逻辑回归中加正则化的参数 alpha ,和前面合起来变成大写的C这个参数;有点共通之处,但不知道在哪里),或许还是一个错误的链接,但我想可能进步了哈哈哈。
    回复 有任何疑惑可以回复我~ 2022-08-26 19:50:48
  • liuyubobobo 回复 提问者 黄义舜 #3
    你的理解挺对,这是两个不同的方向,都有发展前景。并且其实在现阶段他们已经还可以深入划分很多“子领域”。
    
    比如你描述的数据方向,对于每个领域研究的特征,如我给你的链接所述,其实更多的是被领域工作者研究(而不是计算机专业的任务)。另一方面,越来越多的数据,他们的存储,流动,提取,计算(不管怎么算),其实现如今都被放进了“大数据”的篮子里。
    
    再比如你描述的算法方向,其实也不仅仅是要解决性能问题而已,还有很多非常有意义的方向。比如现在以深度学习为主导的人工智能,最大的问题是算法的”可解释性“。这个问题不突破的话,会使得人工智能在很多领域的应用受限。比如一个自动驾驶汽车发生了事故,装了另外一辆汽车,那么到底应该判自动驾驶汽车有问题,还是被撞的汽车有问题?这就涉及到自动驾驶汽车的人工智能,到底为什么做出了一系列的行动判断。(不是计算的角度,而是行为的角度。)
    
    另外一个重要方向是迁移学习。也就是我们现在的人工智能,都是训练一个任务,完成一个任务。一个训练好做手写识别的 AI,是不能判断一张图片是猫还是狗的。但是人类智慧显然不是这样的。我们可以把学习一个任务的经验”迁移到“其他任务上。
    
    再有,就是更广义的,现在的人工智能的主要方向:深度学习,是有可能是一个死胡同的。所谓的死胡同,是指通用人工智能很有可能不能通过深度学习来实现。这件事情其实在历史上已经发生了很多次了。很多曾经大火的人工智能的方法,已经慢慢被发现效果不好,进入了淘汰的边缘。比如我上学的时代,最主流的人工智能方法是遗传算法的方向。但现在,人工智能界暂时很少有人继续走遗传算法这条路了,都来走机器学习这条路了。(因为深度学习的成功。)那么会不会将来冒出一个新方法,或者其实已经存在的方法,因某种原因突然发展,导致大家认为人工智能的未来是这种方法主导的,而非机器学习?这是很有可能的。(实际上,深度学习的基础:神经网络,在 1954 年就提出来了,反向传播 1975 年就被发明出来了。但是在近十年,才被大家注意到其可行性。当然这里面也有其他技术做铺垫,展开来说就太长了。)
    
    我在这里讨论的都比较大。至于你选择什么,要看你个人的具体情况了。整体从工作的角度,数据那边的工作岗位更多一些。纯粹做算法的门槛还是比较高的。
    
    但如果是学界的角度(或者是企业的研究院),这两边都很好。尤其是数据端的很多发展趋势,因为非专业媒体不太懂,所以不会太报道,导致大众了解的比较少。但其实是非常好的方向。比如我认识好几个大牛,就是专门做存储的,非常有前景。但如果不在这个专业里面,是看不到的。
    回复 有任何疑惑可以回复我~ 2022-08-28 14:57:07
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号