教孩子编程,我有几个不成熟不好吗的小建议

对《奇葩说》,我有一个不成熟的小建议 - 奇葩说 第三季
打开豆瓣,和小伙伴
在线追剧讨论剧情
对《奇葩说》,我有一个不成熟的小建议
在我心中,黄执中是当之无愧的BIBI King姜思达应该补一个BIBI Queen昨晚是《奇葩说》第三季的决赛之夜,印象中似乎还从来没有哪个综艺节目会让我如此期待。以至于在回家的地铁上,我硬是临时加开了个流量包用手机看完了它。其实说起辩论这件事儿,由来已久;但有关辩论的话题,却已经很久没有过如此的热闹和关注度了。江湖还是那个江湖,老僵尸们还是那些老僵尸,纵横天下,从此竟多了无数的观众。回想起来,春秋战国时诸子百家争鸣,齐桓公始设稷下学宫专供名士们坐而论道各抒己学,像孟子、邹子、慎子、申子、鲁连子、荀子等等,都是先扬名于辩坛而后周游列国游说诸王。所谓论政而不诛心,辩之大道也。那个时代的辩论,大概就跟我们每天发微博、刷朋友圈一样,既是一种时尚,更是种生活方式。巧合的是,西方几乎同一时期的苏格拉底、亚里士多德、柏拉图等等大哲,也是凭着三寸之舌与人辩而传道。雅典的教学里讲究『三艺』、『七艺』,辩论术始终是必学科目。辩论的辉煌历史,和辩论如今的落寞形成极大反差。它逐渐沦为一种小众的、并不是那么特征鲜明的游戏,直到《奇葩说》的出现。不得不说,洞察力是牛逼的人的核心竞争力之一。譬如罗辑思维,视频脱口秀由来已久,荐书、聊书之类的文化节目也很多,但是罗胖偏能从阅读快餐化的明显特征里,找准一个点,叫帮你读书。它的表义是,我来满足你不会读、没有时间读、耐不下性子读等等一些痛点,同时又借助新颖的观点和颠覆性的观念以及足够丰富且轻松的内容来包装它,隐晦的赋予你一些足够显摆的逼格。大家心照不宣,于是这门买卖就此达成。马东跟罗胖都是多年的策划出身,都是央视的老伙计,又都是靠嘴吃饭。主持人、相声名家、辩论,这三者的结合,果真是天马行空的合情合理。归根到底,终究还是说话的老本行。再聊回节目。《奇葩说》的成功,其实不在于综艺上,不在于它每次产生了多少的笑点和槽点,而是它告诉了我们一种可能性。这种可能性叫:商业与文化也能完美结合,括弧,在娱乐圈和网络世界。套用姜文的梗,这是笑着把钱挣了,顺便,它还教会你一些思考。在我看来,节目一开始的设想很简单:让擅长综艺的选手负责综艺,让懂得辩论的选手来引导辩论。可直到第一季播出没几集,大家才恍然发现,曾经那些在台面上严肃较真甚至显得有些刻板的辩手们,也可以很综艺;曾经那些位居十八线的小明星们虽然又拜金又整容,但这正切合了人们之于奇葩的印象,尤其是,他们说话还可以真的很有意思,尽管常常并没有太多的逻辑。于是,第一季有了马肖恬组合,第二季有了邱晨、陈铭和颜如晶的个性释放,第三季有了黄执中这样大神的星光熠熠和来自姜思达的意外惊喜。节目组、选手们、观众们和赞助商们都知道,各自需要的究竟是什么。所以,无论综艺咖们如何赚足人气,最后的奇葩之王永远属于拥有真正实力的老僵尸;老僵尸们尽管屡屡遭到投票数的打击,却毫无妨碍他们丰富内涵的展现。而此时,综艺咖圈够了足够多的粉,观众早已获得了笑声与思考,马东们广告费收的手舞足蹈,赞助商已被铺天盖地的曝光量亮瞎眼。这样的节目,不枉蔡康永舍弃康熙,不枉高晓松去而复返。它让赚钱和文化这两种一直被人们所排斥的事物,融合的很自然。我们爱钱,我们也爱思考,更重要的,我们不装。再说到本季最后的两个焦点人物。黄执中。应该说,他在辩论领域里,完全就是神一般的存在。他的水平,早在十多年前就已经得到了所有人的公认。而真正让人意外的是,他在综艺上也能如此从容和讨喜。相较于同等段位的胡渐彪,他更适应这个舞台。回顾一下他在节目中的两个经典瞬间:【辩题】核电站即将爆炸,只有两个人能拯救地球——有家庭的「有后东」和单身的「无后米」,该派谁?【立论】『伟大的死亡,往往是一个伟大的阴影。』(无后米去)【辩题】婚前啪啪啪你say no,但伴侣说不啪就分手,你啪不啪?【立论】『这是关于原则辩题。人,值不值钱,就要看他的原则值不值钱。坚持原则,就要付出代价,不然这个原则就不值钱。』(不啪)辨士无双,黄执中是当之无愧的王者。姜思达。大美玲一开始给我的感觉是跟肖骁风格类似的一个妇女之友,却完全没有肖骁那样的闪光。从第一季到第三季,他算得上是元老,然而露面的次数并不多。真正让所有人刮目相看的,是他在第三季的后半段。他的发言开始成为观众的期待,他的表述开始成为力挽狂澜的利器,他依旧穿着这个性十足的服饰,大家却恍若初见。不多说,直接奉上大美玲一战成名的13分钟:最后的最后,我想起来了。我的那个“不成熟的小建议”就是:墙裂希望《奇葩说》能够,长!期!周!播!原文欢迎戳我的:
奇葩说 第三季的更多剧评构建深度神经网络,我有20条「不成熟」的小建议
作者:Matt H、Daniel R
参与:Geek ai、路
本文介绍了构建深度神经网络的一些基本技巧,从通用技巧、神经网络调试和案例研究三方面展开。
在我们的机器学习实验室中,我们已经在许多高性能的机器上进行了成千上万个小时的训练,积累了丰富的经验。在这个过程中,并不只有电脑学习到了很多的知识,事实上我们研究人员也犯了很多错误,并且修复了很多漏洞。
在本文中,我们将根据自身经验(主要基于 TensorFlow)向大家提供一些训练深度神经网络的实用秘诀。有些建议可能对你来说可能已经很熟悉了,但是其他人可能并不太了解。另外还有些建议可能并不适用,甚至可能对于特定的任务来说是不好的建议,所以请谨慎使用!
这些都是一些广为人知的方法,我们也是站在了巨人的肩膀上!本文的目的只是高屋建瓴地对如何在实践中使用它们进行总结。
使用 ADAM 优化器。它确实很有效,相对于较传统的优化器(如原版梯度下降),我们更喜欢使用 ADAM。在 TensorFlow 环境下使用 ADAM 时,请注意:如果你想要保存和恢复模型权重,请记住在设置完 AdamOptimizer 后设置 Saver,这是因为 ADAM 也有需要恢复的状态(即对应于每个权重的学习率)。
ReLU 是最好的非线性(激活函数),这就好比 Sublime 是最好的文本编辑器。但说实话,ReLU 确实是运行速度最快、最简便的,而且令人惊讶的是,它们在工作时梯度并不会逐渐减小(从而能够防止梯度消失)。尽管 sigmoid 是一个常用激活函数,但是它在 DNN 中传播梯度的效果并不太好。
不要在输出层使用激活函数。这应该是显而易见的,但是如果你通过一个共用的函数构建每一层,那这可能是一个很容易犯的错误:请确保在输出层不要使用激活函数。
为每一层添加一个偏置项。这是机器学习的入门知识:本质上,偏置项将一个平面转换到最佳拟合位置。在 y=mx+b 式中,b 是偏置项,使直线能够向上或向下移动到最佳的拟合位置。
使用方差缩放初始化。在 TensorFlow 中,该方法写作 tf.contrib.layers.variance_scaling_initializer()。根据我们的实验,这种初始化方法比常规高斯分布初始化、截断高斯分布初始化及 Xavier 初始化的泛化/缩放性能更好。粗略地说,方差缩放初始化根据每一层输入或输出的数量(在 TensorFlow 中默认为输入的数量)来调整初始随机权重的方差,从而帮助信号在不需要其他技巧(如梯度裁剪或批归一化)的情况下在网络中更深入地传播。Xavier 和方差缩放初始化类似,只不过 Xavier 中每一层的方差几乎是相同的;但是如果网络的各层之间规模差别很大(常见于卷积神经网络),则这些网络可能并不能很好地处理每一层中相同的方差。
白化(归一化)输入数据。在训练中,令样本点的值减去数据集的均值,然后除以它的标准差。当网络的权重在各个方向上延伸和扩展的程度越小,你的网络就能更快、更容易地学习。保持数据输入以均值为中心且方差不变有助于实现这一点。你还必须对每个测试输入也执行相同的归一化过程,所以请确保你的训练集与真实数据类似。
以合理地保留动态范围的方式对输入数据进行缩放。这个步骤和归一化有关,但是应该在归一化操作之前进行。例如,在真实世界中范围为 [0, ] 的数据 x 通常可以用「tanh(x)」或「tanh(x/C)」来进行操作,其中 C 是某个常数,它可以对曲线进行拉伸,从而在 tanh 函数的动态倾斜(斜率较大)部分对更大输入范围内的数据进行拟合。尤其是在输入数据在函数的一端或者两端都不受限的时候,神经网络将在数据处于 (0,1) 时学习效果更好。
一般不要使用学习率衰减。在随机梯度下降(SGD)中,降低学习率是很常见的,但是 ADAM 天然地就考虑到了这个问题。如果你真的希望达到模型性能的极致,请在训练结束前的一小段时间内降低学习率;你可能会看到一个突然出现的很小的误差下降,之后它会再次趋于平缓。
如果你的卷积层有 64 或 128 个滤波器,这就已经足够了。特别是对于深度网络来说,比如 128 个滤波器就已经很多了。如果你已经拥有了大量的滤波器,那么再添加更多的滤波器可能并不会提升性能。
池化是为了变换不变性(transform invariance)。池化本质上是让网络学习到图像「某个部分」的「一般概念」。例如,最大池化能够帮助卷积网络对图像中特征的平移、旋转和缩放具备一定的鲁棒性。
神经网络的调试
如果网络学习效果很差(指网络在训练中的损失/准确率不收敛,或者你得不到想要的结果),你可以试试下面的这些秘诀:
过拟合!如果你的网络学习效果不佳,你首先应该做的就是去过拟合一个训练数据点。准确率基本上应该达到 100% 或 99.99%,或者说误差接近 0。如果你的神经网络不能对一个数据点达到过拟合,那么模型架构就可能存在很严重的问题,但这种问题可能是十分细微的。如果你可以过拟合一个数据点,但是在更大的集合上训练时仍然不能收敛,请尝试下面的几条建议。
降低学习率。你的网络会学习地更慢,但是它可能会找到一个之前使用较大的步长时没找到的最小值。(直观地说,你可以想象一下你正在走过路边的沟渠,此时你想要走进沟的最深处,在那里模型的误差是最小的。)
提高学习率。这将加快训练速度,有助于加强反馈回路(feedback loop)。这意味着你很快就能大概知道你的网络是否有效。尽管这样一来网络应该能更快地收敛,但是训练结果可能不会太好,而且这种「收敛」状态可能实际上是反复震荡的。(使用 ADAM 优化器时,我们认为在许多实验场景下,~0.001 是比较好的学习率。)
减小(小)批量处理的规模。将批处理大小减小到 1 可以向你提供与权重更新相关的更细粒度的反馈,你应该将该过程在 TensorBoard(或者其他的调试/可视化工具)中展示出来。
删掉批归一化层。在将批处理大小减小为 1 时,这样做会暴露是否有梯度消失和梯度爆炸等问题。我们曾经遇到过一个好几个星期都没有收敛的网络,当我们删除了批归一化层(BN 层)之后,我们才意识到第二次迭代的输出都是 NaN。在这里使用批量归一化层,相当于在需要止血带的伤口上贴上了创可贴。批归一化有它能够发挥效果的地方,但前提是你确定自己的网络没有 bug。
加大(小)批量处理的规模。使用一个更大的批处理规模——还觉得不够的话,如果可以,你不妨使用整个训练集——能减小梯度更新的方差,使每次迭代变得更加准确。换句话说,权重更新能够朝着正确的方向发展。但是!它的有效性存在上限,而且还有一些物理内存的限制。我们发现,这条建议通常不如前两个建议(将批处理规模减小到 1、删除批归一化层)有用。
检查你矩阵的重构「reshape」。大幅度的矩阵重构(比如改变图像的 X、Y 维度)会破坏空间局部性,使网络更不容易学习,因为这时网络也必须学习重构。(自然特征变得支离破碎。事实上自然特征呈现出空间局部性也是卷积神经网络能够如此有效的原因!)使用多个图像/通道进行重构时要特别小心;可以使用 numpy.stack() 进行适当的对齐操作。
仔细检查你的损失函数。如果我们使用的是一个复杂的函数,可以试着把它简化为 L1 或 L2 这样的形式。我们发现 L1 对异常值不那么敏感,当我们遇到带有噪声的批或训练点时,可以进行稍小幅度的调整。
如果可以,仔细检查你的可视化结果。你的可视化库(matplotlib、OpenCV 等)是否调整数据值的范围或是对它们进行裁剪?你可以考虑使用一种视觉上均匀的配色方案。
为了使上文描述的过程更有关联性,下面给出了一些用于描述我们构建的卷积神经网络的部分真实回归实验的损失图(通过 TensorBoard 进行可视化)。
最初,网络完全没有学习:
我们试着裁剪数据值,防止它们超越取值范围:
看看这些没有经过平滑的值有多么「疯狂」!学习率太高了吗?我们试着降低学习率,并且在一组输入数据上进行训练:
你可以看到学习率最初的几个变化发生在哪里(大约训练了 300 步和 3000 步时)。显然,这里我们进行的学习率下降调整太快了。所以如果给它更长的学习率衰减时间,它将表现得更好(损失更低):
可以看到,学习率在第 2000 步和第 5000 步时下降。这种情况更好,但是仍然不够完美,因为损失并没有降到 0。
然后我们停止学习率衰减,并且尝试通过 tanh 函数将输入值移动到一个更狭窄的范围内。这很显然将误差值带到了 1 以下,但是我们始终不能过拟合训练集:
在这里我们发现了,通过删除批归一化层,网络很快地在一两次迭代之后输出 NaN。我们禁用了批归一化,并将初始化方法改为方差缩放法。这让一切都不一样了!我们可以过拟合仅仅包含一两个输入的测试集。然而,下面的图对 Y 轴进行了裁剪。初始误差值远远高于 5,这说明误差减小了近 4 个数量级:
上方的图是非常平滑的,但是你可以看到,它极其迅速地过拟合了测试输入,并且随着时间推移,整个训练集的损失降到了 0.01 以下。这个过程没有降低学习率。之后,我们在学习率降低了一个数量级之后继续训练,得到了更好的结果:
这些结果要好得多!但是如果我们以几何级别降低学习率,而不是将训练分成两部分,会如何呢?
在每一步中将学习率乘以 0.9995,结果不是很好:
这大概是因为学习率下降地太快了。乘数如果取 0.999995 会更好,但是结果和完全不衰减相差无几。我们从这个特定的实验序列中得出结论:批归一化隐藏了糟糕的初始化导致的梯度爆炸;并且除了在最后故意设计的一个学习率衰减可能有帮助,减小学习率对 ADAM 优化器并没有特别的帮助。与批归一化一样,对值进行裁剪掩盖了真正的问题。我们还通过 tanh 函数控制高方差的输入值。
我们希望这些基本的诀窍在你对构建深度神经网络更加熟悉的时候能够提供帮助。通常,正是简单的事情让一切变得不同。
当地时间 7 月 14 日,腾讯将在斯德哥尔摩举办 Tencent Academic and Industrial Conference (TAIC),诚邀全球顶尖 AI 学者、青年研究员与腾讯七大事业群专家团队探讨最前沿 AI 研究与应用。点击阅读原文,参与报名。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
未来从这里发声
未来从这里发声
今日搜狐热点(半夏时光123)
第三方登录:教孩子编程 我有几个不成熟的小建议
在今年美国史密森国家航空航天博物馆的妇女历史月活动上,伊万卡·特朗普(Ivanka Trump)谈论了STEM(即科学、技术、工程、数学)领域中的女性,对外披露她及其5岁的女儿Arabella将在夏天参加一个计算机编程课程。
伊万卡表示:“我们很高兴一起学习非常重要的新语言,编程是一种真正的未来语言。”
【参考文章:别人家的孩子:伊万卡·特朗普5岁的女儿开始学编程】
实际上,编程是一项任何孩子都可以参与的创造性活动。你的孩子或许不喜欢编写数据处理算法,但他们可能会喜欢创造游戏、对音乐编程、设计网站、或只是摆弄代码。
很多时候,孩子学习编程要比成年人更快,因为他们不知道编程的“困难”所在。不管你是软件工程师,还是完全没有编程背景,下面这四个建议,都有助于你的孩子学习编程:
1. Scratch 是为小孩子准备的 , Python 则适合大孩子
麻省理工学院的 Scratch 是一个为儿童设计的免费编程工具,可以运行在任何一个现代网页浏览器中。
任何人都可以从 https://scratch.mit.edu 运行它。它的视觉风格受到 Logo 程序的影响,Logo 是一个为 80 和 90 年代儿童设计的主流编程课程。但是 Scratch 远不止是 Logo 的山寨版那么简单。
8 到 13 岁的孩子们将会受益于 Scratch 简单的图形界面。Scratch 可以通过拖拽代码块将它们拼在一起。不可计算的代码片段则无法组合,这样杜绝了字面上的语法错误。Scratch 对那些不会打字的小孩子们来说非常有用。
当然,孩子们如果想编写更加复杂的程序,Scratch 就不够用了 。对于青少年来说,像 Python 这种真正的编程语言才更加适合。
Python 是一种优秀的首选编程语言,因为它的语法非常简单(不像 Java 或者 C# ),代码可读性高(不像 Perl 或者 Java),并且有强大友好的开发者社区 支持。如果 Scratch 已经无法满足你的小孩,Python 是下一步的最佳之选。
2. 展示实际程序的源代码,不要只谈概念
尽管编程以智力著称,但它是个需要动手练习的技能,光靠看书可不行。Python 交互式 shell 命令行鼓励通过实践来发现指令的功用。
如果你直接教你的孩子,写代码的效率要远高于只跟他们谈概念。即使学会了变量、循环、函数,坐在一个空白编辑器前面编写一个新程序仍然让人恐惧。你应该和他们肩并肩坐一起并讲解每一行需要编写的代码。
或者,如果你想分享在线资源给孩子,尽量找那种小游戏的源代码。最好是代码行数小于200的小程序。
Scratch 网站会自动共享其网站上所有项目的源码。多鼓励你的孩子修改这些代码,然后看看这些改动如何影响了最终的程序。
3. 游戏是充满趣味的编程项目
很多年轻程序员往往都是从编写视频游戏开始的。《愤怒的小鸟》、《Mincraft》、《Flappy Bird》、 《Five Nights at Freddy》,和其它的游戏都是灵感的源泉。 我写了本免费的书《Invent Your Own Computer Games with Python》,通过很多独立小游戏(Tic Tac Toe、Hangman 等)的完整源码,来展示编程的概念。
需要注意的是,你孩子所热爱的这些游戏,不一定适合作为入门学习的编程项目。很多游戏是程序员、艺术家、设计师团队一起协作的结果。如果一个游戏需要大量的关卡设计和艺术工作,会吓坏初学者。完成一个简单的游戏,比开始一个永远做不完的大型项目要更容易让人获得满足。
尽管游戏是有趣的,我一般不推荐“游戏制造器”或“游戏生成器”之类的专用软件。和 Scratch 类似的是,这些应用通常试图提供简化的编程环境。但是和 Scratch不同的是,它们会冲淡编程的概念。使用这些工具做编程感觉像在配置一个已有的软件。
4. 让你的手离开鼠标和键盘
分享知识是愉快的。告诉别人你对编程的理解非常好。但是编码是一个需要动手练习的技能,所以让孩子们尽情尝试吧。当和孩子们一同练习时一定要避免抢过孩子键盘的冲动,即使是短暂的也不行。如果他们需要点击一个菜单或按钮,要用手指去点屏幕去引导他们,而不是自己拿着鼠标去点。不管他们要输入什么代码,都让他们自己去做。如果你自己做可能会更快,但你的学生比你更需要练习啊。
萝卜太辣是一个来自硅谷的机器人教育品牌, 拥有多项国内外专利,核心产品是一套自主研发的机器人教育整体解决方案。以云技术为基础,通过模块化机器人智能硬件与课程,为全球的师生、学校、专业机构提供一个可以激发创造潜能、提升综合素质的创新平台。
迄今萝卜太辣已取得进入全国500所学校,受众师生3000余人,举办各类机器人活动、创客活动、展会、培训会等近百场,参与人数达十万的傲人成绩。
萝卜太辣 CR编程学习平台
编译:伯乐在线/段昕理
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点教孩子编程,我有几个不成熟的小建议_百度知道
教孩子编程,我有几个不成熟的小建议
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自心理分析类芝麻团
采纳数:9459
获赞数:15229
参与团队:
根据我当时自学习编写程序的具体情况和体会就是:如果真的要想熟练掌握某一种语言的编程(其他编程语言也一样),那么必须首先要购买一本难度适中的教材,并且亲自上机动手编写、编译、链接、直到调试通过教材中的所有源程序,而不是在教材上阅读源程序。只要长期坚持下去,那么必定会在编写程序上产生一种非常好的灵感的。这样编写程序就会感到非常有兴趣了。
为你推荐:
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 不成熟的建议 的文章

 

随机推荐