神经网络游乐场
A Neural Network Playground · Google Big Picture 团队作品,2016(无配套论文)
在浏览器里搭一个前馈神经网络:加层、加神经元、调学习率,实时看损失曲线往下掉、决策边界怎么长出来。
交互实验(可直接投屏)
原作是一个完整的网页应用,下面直接嵌入;屏幕小或要投影时,点「全屏打开实验」更清楚。
动手三步
- 点左边的「运行」,看右上角测试损失一路掉下来(默认同心圆数据约 450 轮降到 0.001)
- 在「数据」列换成「双螺旋」再运行:同一个网络这次学不动,跑 1500 轮损失还卡在 0.4 到 0.5
- 点「+」加隐藏层和神经元,重新运行,看要加到多大才拟合得出螺旋
- 把学习率从 0.03 调到 1 再运行,看损失上下乱跳;调到 0.0001,看它慢得几乎不动
- 鼠标停在任意一条连线上会弹出「权重的当前取值」,点一下可以直接改成别的数字
课堂怎么用
- 把「隐藏层」讲成看得见的东西:先只留 1 层 1 个神经元,让学生预测能不能分开同心圆,再逐个加上去
- 学习率对照实验:0.0001 / 0.03 / 1 各跑 30 秒,全班一起看损失曲线的三种形状(太慢、稳降、发散)
- 双螺旋只给两个原始特征要很深的网络才学得动,勾上 sin 特征两层就够,用来讲「特征选得好,模型可以很简单」
- 接 A-06 感知机与 B-01 手写数字识别:从一个神经元到一层,再到能自己调结构
思考题
- 同样的网络,为什么能分开同心圆却分不开双螺旋?
- 学习率调大以后,损失为什么反而上下乱跳?
- 把正则化从「无」改成 L1 再训练,网络里的连线发生了什么变化?为什么说这是在做特征选择?
已知限制
- 特征标签按数学记号保留原样,不翻译
- 正文里的书名与团队名保留英文
- 页面按 1024 像素宽设计,投影建议 1366×768 及以上,手机上会挤
- 数据是二维合成数据,只能演示原理,不代表真实任务的难度
- 原作的统计脚本已移除;「保存这个链接」的功能保留,可课前配好参数把网址发给学生
原作 A Neural Network Playground(Daniel Smilkov、Shan Carter 等(Google Big Picture 与 Google Brain 团队),Google Big Picture 团队作品,2016(无配套论文)),Apache-2.0 许可(原文),界面已中文化。