{
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  },
  "lecture_migration": {
   "project_id": "c0b185e7-d7e3-48b6-a605-8f1acdfe243c",
   "notebook_id": "8ed9e8ca4b444a07921ce1df42c6db01",
   "destination": "L2",
   "cloud_run": false
  },
  "title": "LAB 06 · 表示、损失与学习步长"
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "3e089360f752436c82dfb755f2b0967c",
     "type": "text-cell-h1",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-1"
   },
   "source": "# LAB 06 · 表示、损失与学习步长",
   "id": "3e089360f752436c82dfb755f2b0967c"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "2bb622c8cc3b4794b542b663bd1e8ebe",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-2"
   },
   "source": [
    "[返回第二讲 · 一次完整学习步](https://codingai-lec02.pages.dev/#/architecture-supervised-loop/0) · [第二讲导读与学习材料](https://codingai-lec02.pages.dev/course/guide.html) · [问卷作业 ↗](https://tally.so/r/VLroVv)（右键在新标签页打开）。\n",
    "\n",
    "**推荐的轻量课堂练习：一次梯度，到底更新了什么？** 沿用课件的四个灯态、分数 `[2,1,0]` 和标量模型；数据由本页构造，不下载图像、不训练神经网络。\n",
    "\n",
    "| 想观察的问题 | 只改哪个 `P` 参数 | 运行哪些块、看什么 |\n",
    "| --- | --- | --- |\n",
    "| 表示可分，读出也会错吗 | `lamp_threshold: 0.5→1.1` | 准备块 → 第1节；看四态表中B/C预测 |\n",
    "| 同一梯度，步长不同会怎样 | `scalar_lr: 0.1→0.3`，再单独试0.55 | 准备块 → 第3节；看新参数、新前向和新损失 |\n",
    "| 为什么有的更新振荡却收敛 | `learning_rates` 加入0.5 | 准备块 → 第3节 → 第4节；看倍率与左右两图 |\n",
    "| 验证为什么不能与测试混用 | `split_mode: 'random'→'ordered'` | 准备块 → 第5节；看划分区间、选中次数与误差 |\n",
    "\n",
    "**先做第3节。** 固定 `x=2,t=0,w=1`，先算旧梯度，再预测一次更新后的 `w′、y′、L′`；运行后解释为什么“越过最小点”不一定增大损失。\n",
    "\n",
    "需要 NumPy、Matplotlib。修改开头的 `P` 后先重跑准备块，再跑表中对应模块；第4节使用第3节定义的 `scalar_loss`。如果使用过 `USER_OVERRIDES`，它会覆盖 `P` 中同名值，先清除该覆盖或重启自己的运行环境。只看参考图时无需执行。"
   ],
   "id": "2bb622c8cc3b4794b542b663bd1e8ebe"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "07ccbee684e44f9882080532c47cc234",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-3"
   },
   "source": "import json\nimport numpy as np\nimport matplotlib.pyplot as plt\nnp.set_printoptions(precision=4, suppress=True)\nplt.rcParams.update({'figure.dpi':110,'font.size':10,'axes.spines.top':False,'axes.spines.right':False})\nBLUE, GOLD, GREEN, PURPLE = '#002676','#FDB515','#00856A','#69458D'\nCHECKS={}; RESULTS={}\ndef check(name,condition):\n    CHECKS[name]=bool(condition)\n    assert CHECKS[name], name\ndef table(headers,rows,title):\n    fig,ax=plt.subplots(figsize=(max(7,len(headers)*1.5),1+len(rows)*.36))\n    ax.axis('off'); ax.set_title(title,pad=12,color=BLUE)\n    tab=ax.table(cellText=rows,colLabels=headers,loc='center',cellLoc='center')\n    tab.auto_set_font_size(False);tab.set_fontsize(10);tab.scale(1,1.45)\n    for (r,c),cell in tab.get_celld().items():\n        cell.set_edgecolor('#CBD5DF')\n        if r==0:cell.set_facecolor('#E9F0F7')\n    fig.tight_layout();plt.show()\n\nP=dict(lamp_gain=1.0, lamp_threshold=0.5, softmax_shift=100.0, softmax_scale=2.0,\n       scalar_lr=0.1, steps=20, learning_rates=[0.05,0.1,0.25,0.45,0.55],\n       regression_seed=20260921, regression_noise=0.20, regression_train_n=24,\n       regression_degrees=[1,3,9], regression_ridge=1e-4, split_mode='random')\n# 批量验证入口；平常只需改上面的P，不需要设置USER_OVERRIDES。\nP.update(globals().get('USER_OVERRIDES',{}))\nprint('Teaching configuration:',json.dumps(P,ensure_ascii=False))",
   "id": "07ccbee684e44f9882080532c47cc234",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "417ad622d62c42f59f42d26edb4b98d3",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-4"
   },
   "source": "## 1 · 同样四个输入，换成两个隐藏坐标",
   "id": "417ad622d62c42f59f42d26edb4b98d3"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "ea8cba05c9994cea8d191212a618b3ff",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-5"
   },
   "source": "**先认出同一个样本，再看坐标怎样变。** 左图 A=(0,0)、B=(1,0)、C=(0,1)、D=(1,1)；B、C 同类，A、D 同类。右图没有换标签，只把输入变成两个隐藏坐标。\n\n![相同四个灯态在输入坐标与隐藏坐标中的位置](data:image/webp;base64,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)\n\n*默认参考图：本页代码的本地执行，gain=1、threshold=.5。蓝色 B/C 与紫色 A/D 是两类；A、D 在右图重合。虚线是读出边界。*\n\n手工指定 $h_1=\\max(0,a(x_1-x_2))$、$h_2=\\max(0,a(x_2-x_1))$，以 $h_1+h_2>\\tau$ 判正类。**先指图：** D 为什么从右上角落到原点？B、C 为什么还能被一条直线分出来？\n\n**只改一次：** 保持 `lamp_gain=1`，把 `lamp_threshold` 从 .5 改成 1.1。运行前在图上想象虚线移动：先预测错的是哪两个样本，再运行四态表。这样能区分“表示仍可分”和“读出阈值选错”。",
   "id": "ea8cba05c9994cea8d191212a618b3ff"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "ac2158a623b94723aa0f143327a18e4f",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-6"
   },
   "source": "lamps=np.array([[0.,0.],[1.,0.],[0.,1.],[1.,1.]])\nlabels=np.array([0,1,1,0]);names=['A','B','C','D']\ngain=float(P['lamp_gain']);threshold=float(P['lamp_threshold'])\nassert gain>0,'本模块约定正gain；负gain请先重写预测。'\nraw=lamps@np.array([[gain,-gain],[-gain,gain]])\nhidden=np.maximum(raw,0);scores=hidden.sum(1)-threshold;pred=(scores>0).astype(int)\ncheck('lamp_hidden_formula',np.allclose(hidden,[[0,0],[gain,0],[0,gain],[0,0]]))\ncheck('without_relu_two_differences_cancel',np.allclose(raw.sum(1),0))\ntable(['ID','input','hidden','score','label','prediction'],\n      [[names[i],str(lamps[i].astype(int).tolist()),str(hidden[i].tolist()),f'{scores[i]:.3f}',int(labels[i]),int(pred[i])] for i in range(4)],\n      'Same four lamp states, different coordinates')\nfig,axes=plt.subplots(1,2,figsize=(10,4))\nfor ax,points,title in zip(axes,[lamps,hidden],['Input coordinates','Hidden coordinates']):\n    for i,(x,y) in enumerate(points):\n        ax.scatter(x,y,s=100,facecolors='white' if i==3 else (BLUE if labels[i] else PURPLE),edgecolors=BLUE if labels[i] else PURPLE,zorder=3)\n        dy=-.10 if i==3 else .08\n        ax.annotate(names[i],(x,y),xytext=(8,-15 if i==3 else 8),textcoords='offset points')\n    lim=max(1,gain)*1.25;ax.set(xlim=(-.2,lim),ylim=(-.2,lim),title=title,xlabel='coordinate 1',ylabel='coordinate 2');ax.set_aspect('equal');ax.grid(alpha=.2)\naxis=np.linspace(0,max(gain,threshold,1),100)\naxes[1].plot(axis,threshold-axis,'--',color=GREEN,label='h1 + h2 = threshold');axes[1].legend()\nfig.tight_layout();plt.show()\nRESULTS['lamps']={'hidden':hidden.tolist(),'predictions':pred.tolist(),'accuracy':float((pred==labels).mean())}",
   "id": "ac2158a623b94723aa0f143327a18e4f",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "24ae00a124bf4f7bbc27607cf2e60d55",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-7"
   },
   "source": [
    "**运行后看这里。** 看四态表的 `hidden` 与 `prediction`：表示坐标不变而预测改变，说明这次改的是读出阈值。保存图仍显示默认值；你的新图在代码输出区。"
   ],
   "id": "24ae00a124bf4f7bbc27607cf2e60d55"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "a411a052683346c4877f0b3e192bf85b",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-8"
   },
   "source": "**观察与边界：** 默认B、C落在两条轴上，A、D落在原点；换表示后可由直线读出。去掉ReLU，两条方向差相加恒为0。手工找到一个解证明“能够表达”，没有证明训练一定会找到它；改变阈值导致失败也不等于隐藏表示失去可分性。\n\n**留给你的记录：** 修改前预测____；只改了____；四行中变化的是____；这个变化发生在表示还是读出____。",
   "id": "a411a052683346c4877f0b3e192bf85b"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "d998e1d593f34a3392daac574eed02c7",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-9"
   },
   "source": "## 2 · Softmax：共同平移不变，缩放会改变概率",
   "id": "d998e1d593f34a3392daac574eed02c7"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "9462692bf2e5401ba0de09b71c7e0285",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-10"
   },
   "source": "**预测：** 把(2,1,0)整体加100，概率会怎样？所有分数乘2，类别排序与概率会分别怎样？\n\n**可改参数：** `softmax_shift`、正的`softmax_scale`。先运行默认值，再试scale=.5。\n\n下面先减去最大logit计算softmax。图表比较基础、平移、缩放；同时计算真值概率.6/.2/.01的交叉熵，并以有限差分验证$\\partial L/\\partial z=p-\\mathrm{onehot}(y)$。",
   "id": "9462692bf2e5401ba0de09b71c7e0285"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "c77f2431c1eb4df69ba79d5dfbc426ad",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-11"
   },
   "source": "def softmax(z):\n    z=np.asarray(z,dtype=float);e=np.exp(z-z.max());return e/e.sum()\ndef ce_logits(z,target):\n    z=np.asarray(z,dtype=float);m=z.max();return float(m+np.log(np.exp(z-m).sum())-z[target])\nz=np.array([2.,1.,0.]);assert P['softmax_scale']>0\np0=softmax(z);ps=softmax(z+P['softmax_shift']);pt=softmax(z*P['softmax_scale'])\ncheck('softmax_translation',np.allclose(p0,ps,rtol=1e-12,atol=1e-12))\ncheck('softmax_positive_scale_preserves_argmax',p0.argmax()==pt.argmax())\ncheck('softmax_probabilities_sum_to_one',all(np.isclose(p.sum(),1) for p in [p0,ps,pt]))\ntable(['configuration','p(A)','p(B)','p(C)','CE if A true'],[[name,*[f'{v:.4f}' for v in prob],f'{-np.log(prob[0]):.4f}'] for name,prob in [('base',p0),('common shift',ps),('positive scale',pt)]],'Relative scores determine probabilities')\nfig,ax=plt.subplots(figsize=(8,3.5));pos=np.arange(3)\nfor j,(p,name,color) in enumerate([(p0,'base',BLUE),(ps,'shift',GOLD),(pt,'scale',GREEN)]):ax.bar(pos+(j-1)*.23,p,.23,label=name,color=color)\nax.set(xticks=pos,xticklabels=['A','B','C'],ylim=(0,1),ylabel='Probability');ax.legend();fig.tight_layout();plt.show()\ntruth_prob=np.array([.6,.2,.01]);losses=-np.log(truth_prob)\ntable(['True-class probability','Cross-entropy'],[[f'{p:.2f}',f'{l:.4f}'] for p,l in zip(truth_prob,losses)],'Higher true-class probability, smaller cross-entropy')\neps=1e-5;numeric=np.array([(ce_logits(z+eps*np.eye(3)[i],0)-ce_logits(z-eps*np.eye(3)[i],0))/(2*eps) for i in range(3)])\nanalytic=p0-np.array([1,0,0]);check('CE_logit_gradient',np.allclose(numeric,analytic,atol=1e-9))\nprint('CE gradient, analytic:',analytic,' finite difference:',numeric)\nRESULTS['softmax']={'base':p0.tolist(),'shifted':ps.tolist(),'scaled':pt.tolist(),'CE_examples':losses.tolist(),'gradient_max_error':float(np.max(np.abs(numeric-analytic)))}\n# Exact logical counterexample: real class A=0; predicted class B stays wrong.\nwrong_probs=np.array([[.1,.9],[.01,.99]],dtype=float)\nwrong_entropy=-(wrong_probs*np.log(wrong_probs)).sum(1)\nwrong_ce=-np.log(wrong_probs[:,0])\nwrong_pred=wrong_probs.argmax(1)\nassert np.array_equal(wrong_pred,[1,1])\nassert wrong_entropy[1]<wrong_entropy[0] and wrong_ce[1]>wrong_ce[0]\ntable(['p(A)','p(B)','H (natural log)','CE if A true','correct?'],\n      [[*p,round(float(h),6),round(float(l),6),False] for p,h,l in zip(wrong_probs,wrong_entropy,wrong_ce)],\n      'Entropy falls while the prediction stays wrong: exact construction')\nRESULTS['entropy_counterexample']={'probabilities':wrong_probs.tolist(),'entropy_nats':wrong_entropy.tolist(),\n 'true_class':0,'predictions':wrong_pred.tolist(),'cross_entropy':wrong_ce.tolist(),'identity':'exact mathematical construction; no Tent execution'}\nprint('This is not a measured Tent trajectory. It only refutes entropy decrease => correctness.')\n",
   "id": "c77f2431c1eb4df69ba79d5dfbc426ad",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "0826cd1b852741959a632ffc2bdb1ca9",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-12"
   },
   "source": [
    "**运行后看这里。** 核对三组概率：共同平移应保持整行，正缩放保持最高类但改变概率。再看 `CE gradient` 的解析值与有限差分；两者一致只检验本算例导数。"
   ],
   "id": "0826cd1b852741959a632ffc2bdb1ca9"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "fb1dfc5f16fb4d94b903fc63419e0687",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-13"
   },
   "source": "**观察与边界：** 正倍缩放保持argmax，却改变概率与损失；这不是校准能力或泛化能力改善的证据。共同平移不变来自归一化。数值稳定实现避免大指数溢出；也不意味着机器能精确区分任意大的共同偏移。\n\n**记录：** 预测____；修改____；排序是否变化____；真值概率/损失变化____；需要怎样的数据才能讨论校准____。\n\n**连到无标签适应。** 当真类为 A，(0.1,0.9)→(0.01,0.99) 的自然对数熵从 0.325083 降到 0.056002，预测仍错，真类交叉熵反而从 2.302585 升到 4.605170。监督训练用标签定义纠错方向；部署时能计算熵并不意味着拿到了答案。这里仅核对逻辑反例，真实适应帮助或失败要由独立 source/norm/Tent 实验评价。",
   "id": "fb1dfc5f16fb4d94b903fc63419e0687"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "ede83a24b4da4f4e8283ad878e9233d5",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-14"
   },
   "source": "## 3 · 一个完整学习步：先求导，再改参数，再重新前向",
   "id": "ede83a24b4da4f4e8283ad878e9233d5"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "ea29896e16e648838c65bbad2c55c5f8",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-15"
   },
   "source": "**预测：** 固定$x=2,t=0,w=1$，$y=wx$、$L=\\frac12(y-t)^2$。旧点梯度为什么为4？学习率.1之后，哪些数必须重算？\n\n**可改参数：** `scalar_lr`，默认.1；可试.3或.55。先记录你预计的$w'$与$L'$，再运行。",
   "id": "ea29896e16e648838c65bbad2c55c5f8"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "fab9052c9eca4a08b9539ea976bc4a4d",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-16"
   },
   "source": "scalar_x,scalar_t,scalar_w=2.,0.,1.\ndef scalar_loss(w):return .5*(scalar_x*w-scalar_t)**2\nold_y=scalar_x*scalar_w;old_loss=scalar_loss(scalar_w)\nupstream=old_y-scalar_t;local=scalar_x;gradient=upstream*local\nnumeric=(scalar_loss(scalar_w+1e-5)-scalar_loss(scalar_w-1e-5))/(2e-5)\neta=float(P['scalar_lr']);new_w=scalar_w-eta*gradient;new_y=scalar_x*new_w;new_loss=scalar_loss(new_w)\ncheck('scalar_chain_rule',np.isclose(gradient,4) and np.isclose(numeric,gradient,atol=1e-9))\nif eta==.1:check('slide_scalar_update',np.allclose([new_w,new_y,new_loss],[.6,1.2,.72]))\ntable(['state','w','y','loss','gradient used'],[['before',scalar_w,old_y,old_loss,gradient],['after',f'{new_w:.4f}',f'{new_y:.4f}',f'{new_loss:.4f}','old-point g=4']],'One update, then a fresh forward pass')\ngrid=np.linspace(min(-.4,new_w-.3),max(1.3,new_w+.3),250)\nfig,ax=plt.subplots(figsize=(8,3.6));ax.plot(grid,scalar_loss(grid),color=BLUE,label='L(w)=2w^2');ax.scatter([scalar_w,new_w],[old_loss,new_loss],c=[GOLD,GREEN],s=85,zorder=3)\nax.annotate('old',(scalar_w,old_loss),xytext=(8,10),textcoords='offset points');ax.annotate('new',(new_w,new_loss),xytext=(8,10),textcoords='offset points')\nax.annotate('',xy=(new_w,-.15),xytext=(scalar_w,-.15),arrowprops=dict(arrowstyle='->',color=GREEN));ax.set(xlabel='Parameter w',ylabel='Loss',title=f'Learning rate = {eta:g}');ax.legend();fig.tight_layout();plt.show()\nRESULTS['scalar']={'gradient':gradient,'eta':eta,'w_new':new_w,'y_new':new_y,'loss_new':new_loss}",
   "id": "fab9052c9eca4a08b9539ea976bc4a4d",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "c0616e0c743f4b5d9a509254e5ed4b83",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-17"
   },
   "source": [
    "**运行后看这里。** 对照 `before / after` 两行：梯度来自旧点，更新后损失必须重新前向计算。请把你的 `w′、y′、L′` 与预测逐项核对。"
   ],
   "id": "c0616e0c743f4b5d9a509254e5ed4b83"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "f5fc56528c384f53873f06bffeb0a0ca",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-18"
   },
   "source": "**观察与边界：** 反向求导时$w$仍为1；优化器随后改$w$，新损失来自新前向。旧梯度4不是新位置的梯度。越过最小点未必损失增大：例如.3会越过0，但仍更接近0；学习率过大则可能增大损失。\n\n**记录：** 预测$w'$____、$L'$____；运行读数____；旧梯度与新梯度分别是____。",
   "id": "f5fc56528c384f53873f06bffeb0a0ca"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "5bae54390fd44e59b41b3cbc7e1b74e9",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-19"
   },
   "source": "## 4 · 重复同一步，学习率如何改变整个轨迹",
   "id": "5bae54390fd44e59b41b3cbc7e1b74e9"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "f019cf5b448a4131a344b18268593bac",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-20"
   },
   "source": "**把同一步重复 20 次。** 同一个目标 $L=2w^2$、同一个起点 $w_0=1$，现在只改变学习率。\n\n![不同学习率下的参数轨迹和对数损失曲线](data:image/webp;base64,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)\n\n*默认参考图：左图是 w，右图是损失的对数坐标。学习率 .55 的轨迹逐渐放大，压缩了左图其余曲线的可见幅度；请结合右图读取收敛情况。显示损失下限为 10⁻¹⁴，计算值没有截断。教学构造，本地运行。*\n\n递推式是 $w_{k+1}=(1-4\\eta)w_k$。**先找一对：** .05 与 .45 的参数符号行为不同，为什么右图的损失轨迹却重合？\n\n**只改一次：** 在 `learning_rates` 中加入 .5，保持 `steps=20`。根据倍率 $1-4\\eta$ 预测同号收敛、交替收敛、来回振荡或放大，再运行。这里的阈值属于这一个二次函数。",
   "id": "f019cf5b448a4131a344b18268593bac"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "b0ce56c1add44d2287d2871655010a86",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-21"
   },
   "source": "steps=int(P['steps']);assert 1<=steps<=100\nrates=list(map(float,P['learning_rates']));assert all(0<=r<=1 for r in rates)\ntraces={}\nfor rate in rates:\n    ws=[1.]\n    for _ in range(steps):ws.append(ws[-1]-rate*4*ws[-1])\n    ws=np.array(ws);check(f'scalar_closed_form_eta_{rate}',np.allclose(ws,(1-4*rate)**np.arange(steps+1)))\n    traces[rate]=ws\nfig,axes=plt.subplots(1,2,figsize=(11,4))\nfor rate,ws in traces.items():\n    axes[0].plot(ws,marker='.',label=f'eta={rate:g}')\n    axes[1].semilogy(np.maximum(scalar_loss(ws),1e-14),label=f'eta={rate:g}')\naxes[0].set(xlabel='Update',ylabel='w',title='Parameter trajectories');axes[0].axhline(0,color='grey',lw=1)\naxes[1].set(xlabel='Update',ylabel='Loss (display floor 1e-14)',title='Same objective, different step sizes')\nfor ax in axes:ax.legend(fontsize=8)\nfig.tight_layout();plt.show()\ntable(['eta','multiplier 1-4 eta','final w','final loss'],[[r,f'{1-4*r:.3f}',f'{w[-1]:.6g}',f'{scalar_loss(w[-1]):.6g}'] for r,w in traces.items()],'Convergence depends on the local curvature and step size')\nRESULTS['rates']={str(r):{'last_w':float(w[-1]),'last_loss':float(scalar_loss(w[-1]))} for r,w in traces.items()}",
   "id": "b0ce56c1add44d2287d2871655010a86",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "213e96ec44bc4c1d928db99c21dfa0bd",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-22"
   },
   "source": [
    "**运行后看这里。** 先看倍率 `1−4η`，再读参数轨迹与损失：正负号交替不等于损失必然上升。图的对数显示下限与表中实际数值要分开。"
   ],
   "id": "213e96ec44bc4c1d928db99c21dfa0bd"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "5102bf520672446dbb1f7c1d7ca6f13b",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-23"
   },
   "source": "**观察与边界：** 此特定二次函数从非零起点收敛到0的条件是$0<\\eta<.5$；.25恰好一步到0，.5来回振荡。对一般神经网络，曲率会随参数变化，不能把“.25最好”推广出去。图中为了取对数把显示值截至$10^{-14}$；表里的真实损失未截断。\n\n**记录：** 我选的学习率____；预测倍率____；观察到同号/交替/放大____；这个结论依赖的函数____。",
   "id": "5102bf520672446dbb1f7c1d7ca6f13b"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "f63d6115d7a44497ac23a7d009485355",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-24"
   },
   "source": "## 5 · 用训练数据拟合，用验证数据选，用测试数据评价",
   "id": "f63d6115d7a44497ac23a7d009485355"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "1b8585330b4843e1b1a25805ce3d6537",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-25"
   },
   "source": "**预测：** 多项式次数越高，训练误差一定能说明新样本表现吗？把随机划分改为按$x$排序划分，会多出什么问题？\n\n**可改参数：** `regression_train_n`、`regression_noise`、`regression_degrees`、`regression_ridge`、`split_mode`（`random`或`ordered`）。固定seed先运行默认配置，再只改一个因素。\n\n这里明确构造$y=\\sin(\\pi x)+.25x+\\epsilon$。用训练集求带L2惩罚的最小二乘参数，用验证MSE选次数；**只对已经选好的一个模型**计算测试MSE。采用Legendre多项式基改善数值条件，不把直接求解伪称为多轮SGD训练。图中的真函数因数据是合成的才可访问；左图纵轴固定为[-3,3]便于对照，外推曲线可能超出显示范围，误差表仍用完整预测计算。",
   "id": "1b8585330b4843e1b1a25805ce3d6537"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "e25e8ec846044d6193ab283599138386",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-26"
   },
   "source": "rng=np.random.default_rng(int(P['regression_seed']));ntr=int(P['regression_train_n']);assert 8<=ntr<=200\nnval,ntest=60,60;total=ntr+nval+ntest\nxx=rng.uniform(-1,1,total);truth=np.sin(np.pi*xx)+.25*xx\nyy=truth+float(P['regression_noise'])*rng.normal(size=total)\nmode=P['split_mode'];assert mode in ['random','ordered']\norder=rng.permutation(total) if mode=='random' else np.argsort(xx)\nitr,iva,ite=np.split(order,[ntr,ntr+nval])\ncheck('regression_disjoint_splits',len(set(itr)&set(iva))==len(set(itr)&set(ite))==len(set(iva)&set(ite))==0)\nridge=float(P['regression_ridge']);assert ridge>=0\ndegrees=list(map(int,P['regression_degrees']));assert all(1<=d<=20 for d in degrees)\nfits={};rows=[]\nfor degree in degrees:\n    Xtr=np.polynomial.legendre.legvander(xx[itr],degree);Xva=np.polynomial.legendre.legvander(xx[iva],degree)\n    penalty=np.eye(degree+1);penalty[0,0]=0\n    # Augmented least squares: mean training squared error + ridge*||non-intercept weights||^2.\n    A=np.vstack([Xtr/np.sqrt(ntr),np.sqrt(ridge)*penalty]);b=np.r_[yy[itr]/np.sqrt(ntr),np.zeros(degree+1)]\n    coef=np.linalg.lstsq(A,b,rcond=None)[0]\n    tr=float(np.mean((Xtr@coef-yy[itr])**2));va=float(np.mean((Xva@coef-yy[iva])**2))\n    fits[degree]={'coef':coef,'train':tr,'validation':va};rows.append([degree,f'{tr:.5f}',f'{va:.5f}'])\nselected=min(degrees,key=lambda d:fits[d]['validation'])\ntable(['Degree','Training MSE','Validation MSE'],rows,f'Selection uses validation only; split={mode}')\nplot_x=np.linspace(-1,1,300);fig,axes=plt.subplots(1,2,figsize=(11,4))\naxes[0].scatter(xx[itr],yy[itr],s=18,label='train',color=BLUE);axes[0].scatter(xx[iva],yy[iva],s=14,facecolors='none',edgecolors=GREEN,label='validation')\naxes[0].plot(plot_x,np.sin(np.pi*plot_x)+.25*plot_x,'k--',label='known synthetic function')\nfor degree,fit in fits.items():axes[0].plot(plot_x,np.polynomial.legendre.legval(plot_x,fit['coef']),label=f'degree {degree}')\naxes[0].set(xlabel='x',ylabel='y',title='Constructed regression; test points withheld',ylim=(-3,3));axes[0].legend(fontsize=7)\npos=np.arange(len(degrees));axes[1].bar(pos-.17,[fits[d]['train'] for d in degrees],.34,label='train',color=BLUE);axes[1].bar(pos+.17,[fits[d]['validation'] for d in degrees],.34,label='validation',color=GREEN)\naxes[1].set(xticks=pos,xticklabels=degrees,xlabel='Polynomial degree',ylabel='MSE',title='Compare frozen fitted models');axes[1].legend();fig.tight_layout();plt.show()\n# Only now evaluate the locked choice on test. Test values never entered selection.\ntest_prediction=np.polynomial.legendre.legval(xx[ite],fits[selected]['coef'])\ntest_mse=float(np.mean((test_prediction-yy[ite])**2))\ncheck('selected_by_validation',fits[selected]['validation']==min(f['validation'] for f in fits.values()))\nprint('Locked degree:',selected,' final test MSE:',round(test_mse,6))\nprint('Split x ranges:',{name:[round(float(xx[ids].min()),3),round(float(xx[ids].max()),3)] for name,ids in [('train',itr),('validation',iva),('test',ite)]})\nRESULTS['regression']={'mode':mode,'selected_degree':selected,'train_n':ntr,'validation_n':nval,'test_n':ntest,'test_mse':test_mse,'candidates':{str(d):{'train':fits[d]['train'],'validation':fits[d]['validation']} for d in degrees}}\nprint('Checks passed:',sum(CHECKS.values()),'/',len(CHECKS))",
   "id": "e25e8ec846044d6193ab283599138386",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "3ad7ac529e1c4adc8d8de47c4fe48a6d",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-27"
   },
   "source": [
    "**运行后看这里。** 先按验证MSE找到被锁定的次数，再看唯一报告的测试MSE。改为有序划分后，打印出的 `Split x ranges` 是解释外推困难的第一条证据。"
   ],
   "id": "3ad7ac529e1c4adc8d8de47c4fe48a6d"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "236c75a0ab634e90bc51990d90b6841b",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-28"
   },
   "source": "**观察与边界：** 验证MSE低的候选并非必然拥有最低总体风险；这是单次有限样本构造。`ordered`使训练与评价覆盖不同$x$区间，因此误差还包含外推困难，不能只用“过拟合”解释。改变配置后先重置seed并重做全部划分；不要看测试结果后再挑次数。如果反复用本页同一个测试集作开发比较，应另保留新的最终评价数据。\n\n**记录模板（自愿练习）：** 假设____；只改参数____；固定项____；训练/验证变化____；按验证选择____；最终测试____；仍不能据此判断____。",
   "id": "236c75a0ab634e90bc51990d90b6841b"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "2018c6c9294c43d3bdd129148b05e68f",
     "type": "text-cell-h3",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-29"
   },
   "source": "### 来源与本次改编身份",
   "id": "2018c6c9294c43d3bdd129148b05e68f"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "0ddebf18522447889c6c287474569225",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-30"
   },
   "source": "- Spring26 [Lecture2-3_softmax-regression](https://deepnote.com/project/f8d9c543-5a2a-4932-9218-b83425e7d06f/notebook/6bc3ba9a8a4b4e4d9088a39c48a9af09)：继承概率/交叉熵、logits与受控比较问题；本实验重新写成NumPy小构造，未复用原Fashion-MNIST训练输出或FakeData分支。\n- Spring26 [Lecture2-4_generalization](https://deepnote.com/project/f8d9c543-5a2a-4932-9218-b83425e7d06f/notebook/c50e79b33e68471e83a93f075711158d)：继承多项式复杂度与评价职责。历史代码按排序$x$的前后段划分；本版默认随机划分，将有序划分作为显式外推对照。\n- 对齐当前Slides：两灯、隐藏坐标、Softmax、交叉熵、标量更新与训练/验证/测试职责。历史链接是来源定位；本页保存的输出来自本页代码，不代表重新执行过往年的云端Notebook。",
   "id": "0ddebf18522447889c6c287474569225"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "9de64d15accd4c9bace58a07a2163380",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-31"
   },
   "source": "**返回课堂导读** · [返回幻灯片](https://codingai-lec02.pages.dev/)",
   "id": "9de64d15accd4c9bace58a07a2163380"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "46f2bb1d1e614b10b48fab44ba8cab83",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-32"
   },
   "source": "## 按问题查阅：补充推导与机制核对",
   "id": "46f2bb1d1e614b10b48fab44ba8cab83"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "12fd029ee999470ab7d0ebd2d4655fd9",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-33"
   },
   "source": "以下完整保留此前「从表示到学习：基础与优化自学」专题的扩展正文与独立机制代码。这里按问题选读，不属于本次随课必走路线；原文中的“主讲”是当时的叙述背景，本册按问题查阅；全课主讲、连续讲义与实验的对应关系以 CLS 00 统一导读为准。",
   "id": "12fd029ee999470ab7d0ebd2d4655fd9"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "74ef593de230499b9d2b9b101818dd50",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-34"
   },
   "source": "## 1. 用例子约束规则：最近邻也有建模选择",
   "id": "74ef593de230499b9d2b9b101818dd50"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "d5264e6887154207bbbc17686f8f433c",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-35"
   },
   "source": "把学习系统拆成五个对象：输入与标签、表示、评分或投票规则、选择规则的方法、未见数据上的评价。换成卷积或残差网络以后，这五个对象仍然存在。数据驱动把部分规则选择交给样本，却没有替我们选择任务、距离或评价协议。\n\n最近邻保存已有样本，在指定表示与距离下找邻居。一个合成查询的前三位标签依次是 A、B、B：k=1 预测 A，k=3 预测 B。这里没有哪一个 k 天生正确；增大 k 可以平滑局部决策，也可能混入别类。若图像平移使同类的像素距离大幅增加，先检验表示与距离，不能只调 k。朴素逐一比较还会让预测成本随存储样本增长。\n\n参数模型用一组参数概括可重复使用的评分规则。它把问题转为：这一函数族能否表达所需区分，以及训练能否找到合适参数。\n\n**先判断**：同一个查询从 A 改判成 B，能否直接说明 k=3 泛化更好？\n\n**核对提示**：不能。这里只改变了邻居范围；需要固定数据划分，在验证集选 k，并用保留的测试集评价。若距离本身与任务不相符，更多邻居不能保证修复。\n\n**来源与继续阅读**\n\n- [CS231n 2026 · Image Classification with Linear Classifiers](https://cs231n.stanford.edu/slides/2026/lecture_2.pdf)\n- [CS231n 2026 · Regularization and Optimization](https://cs231n.stanford.edu/slides/2026/lecture_3.pdf)\n- [CS231n 2026 · Neural Networks and Backpropagation](https://cs231n.stanford.edu/slides/2026/lecture_4.pdf)\n- [D2L · Softmax Regression](https://d2l.ai/chapter_linear-classification/softmax-regression.html)\n- [D2L · From Fully Connected Layers to Convolutions](https://d2l.ai/chapter_convolutional-neural-networks/why-conv.html)",
   "id": "d5264e6887154207bbbc17686f8f433c"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "d8c5426547bd4154bc86126a8371b1ab",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-36"
   },
   "source": "## 2. 同一线性规则的模板、贡献与几何视角",
   "id": "d8c5426547bd4154bc86126a8371b1ab"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "7e86ee93519e4319a3548f243c78692a",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-37"
   },
   "source": "代数形式是 s=wᵀx+b。把 w 排回图像形状，就得到一张有正负权重的模板；每个像素的贡献仍是 wᵢxᵢ。课程的 4×4 合成图中，中间两列为 +1、两侧列为 −1，正贡献合计 10，负贡献合计 −3，加偏置 −2 得 5。全部变亮不一定提高分数，因为负权重也参与计算。这个分数还必须与其他类别分数比较。\n\n几何上，s=0 是一条超平面。以 s=x₁+x₂−1 为例，P=(2,1) 得 2，R=(½,½) 得 0，Q=(−1,0) 得 −2。三个视角描述同一函数，并不是三个算法。\n\n如果某组类别在固定表示下无法线性分开，再好的优化器也不会把直线变成曲线。另一方面，线性可分也不保证任意训练配置都能找到好解。诊断时把“能表示”“追求什么”“找得到”分开。\n\n**先判断**：一张模糊的权重模板能否证明网络只认识平均外观？\n\n**核对提示**：它展示的是一个线性评分模式。仅凭模板图不能断言整个系统如何使用非线性表示，也不能代替对输入与预测的检验。\n\n**来源与继续阅读**\n\n- [CS231n 2026 · Image Classification with Linear Classifiers](https://cs231n.stanford.edu/slides/2026/lecture_2.pdf)\n- [D2L · Multilayer Perceptrons](https://d2l.ai/chapter_multilayer-perceptrons/mlp.html)",
   "id": "7e86ee93519e4319a3548f243c78692a"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "d2bd6ab1759c4418937a9ebc369f2ecc",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-38"
   },
   "source": "## 3. 相对分数、标签损失与正则偏好",
   "id": "d2bd6ab1759c4418937a9ebc369f2ecc"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "c2ba5af0934743ea8d07bb19b71ef11d",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-39"
   },
   "source": "Softmax 将分数变成相对概率。把 [2,1,0] 同时加 10，指数分子分母的公共倍数抵消，概率仍约为 [0.6652,0.2447,0.0900]。标签尚未出现时，只能比较预测；加入正确类别 y，单样本交叉熵是 −log p_y。正确类别概率从 0.20 降到 0.01，损失从约 1.609 增到 4.605，即使两次 argmax 都错，训练反馈仍不同。\n\n对样本损失求平均得到经验目标。有限观测还允许许多不同的延续方式：穿过五个观测点的波动曲线，与接受一些误差的平缓曲线，在点间可能相差很大。没有未观测处的真值，不能只靠“更平滑”宣布胜者。\n\n正则项把偏好写进目标，例如 J=L_data+λ‖W‖²/2。L2 惩罚指定参数的大幅增长，改变的是优化目标；正则强度依靠验证选择。它不是“保证新样本正确”的证书。\n\n**先判断**：给所有 logits 加同一个常数，与把所有 logits 乘 10，有何不同？\n\n**核对提示**：共同平移不改 Softmax；正比例缩放保持 argmax，却通常使概率更尖锐并改变交叉熵。比较时要说明讨论的是预测类别、概率还是损失。\n\n**推导时可用的关系式**\n\n$$\\mathcal L_i=-\\log p_{y_i},\\qquad \\mathcal L_{data}=\\frac1N\\sum_i\\mathcal L_i$$\n\n从一个样本的纠错信号，汇总为经验目标。\n\n$$\\min_\\theta\\;\\mathcal L_{data}(\\theta)+\\lambda R(\\theta)$$\n\n拟合项与正则项共同定义优化目标。\n\n**来源与继续阅读**\n\n- [D2L · Softmax Regression](https://d2l.ai/chapter_linear-classification/softmax-regression.html)\n- [CS231n 2026 · Image Classification with Linear Classifiers](https://cs231n.stanford.edu/slides/2026/lecture_2.pdf)\n- [CS231n 2026 · Regularization and Optimization](https://cs231n.stanford.edu/slides/2026/lecture_3.pdf)\n- [D2L · Weight Decay](https://d2l.ai/chapter_linear-regression/weight-decay.html)",
   "id": "c2ba5af0934743ea8d07bb19b71ef11d"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "d1e074d26ad04faab0cb5a816c8ff69a",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-40"
   },
   "source": "## 4. 当前位置的梯度估计，与连续更新后的轨迹",
   "id": "d1e074d26ad04faab0cb5a816c8ff69a"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "1363dd0c98d7410d9435b63151d9df3f",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-41"
   },
   "source": "优化的“位置”是参数，损失是此处的目标值，更新规则决定下一步。小批量用部分样本估计当前梯度，使每次更新成本较低；噪声、硬件利用率与每轮更新数同时随 batch 大小变化。\n\n在同一个参数位置，三批梯度分别为 (2,0.5)、(0.5,2)、(0.5,0.5)，等权平均是 (1,1)。这可以说明估计之间的差异，却不能把三个箭头首尾相接当成真实训练轨迹。真实顺序训练在第一步后已经换了参数，下一批必须在新位置重新计算。\n\n因此比较 batch 大小时应先决定预算：相同更新次数、相同 epoch 与相同计算时间并不是同一约束。记录训练与验证曲线，才知道更便宜的更新最终带来了什么。\n\n**先判断**：12 个样本、batch=3 的一轮训练，为什么不是先求四个旧位置梯度，再统一改一次？\n\n**核对提示**：标准逐批 SGD 通常会更新四次，每次在当时参数处求导。先累加再统一更新是另一种梯度累积方案，需要明确损失归一化与更新频率。\n\n**来源与继续阅读**\n\n- [D2L · Optimization and Deep Learning](https://d2l.ai/chapter_optimization/optimization-intro.html)\n- [CS231n 2026 · Regularization and Optimization](https://cs231n.stanford.edu/slides/2026/lecture_3.pdf)\n- [D2L · Minibatch Stochastic Gradient Descent](https://d2l.ai/chapter_optimization/minibatch-sgd.html)",
   "id": "1363dd0c98d7410d9435b63151d9df3f"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "8266f2c2ff8c4fc0aa5b66bde982b966",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-42"
   },
   "source": "## 5. 动量、自适应尺度与日程：先固定比较协议",
   "id": "8266f2c2ff8c4fc0aa5b66bde982b966"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "30bce775135149f593b099267a905521",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-43"
   },
   "source": "Momentum 的一种约定是 v_t=βv_{t−1}+g_t，θ_{t+1}=θ_t−η_tv_t。长期同向分量累积、交替分量部分抵消；系数与学习率不合适时仍会越过有效区域。不同软件也可能采用等价但缩放不同的速度定义，比较公式时先对齐约定。\n\nAdaGrad 累加每个坐标的平方梯度，按其平方根缩放更新；长期累积可能让有效步长持续缩小。Adam 用一阶与二阶矩的指数平均，并通常做偏差修正。它们改变更新方向或尺度，不能替代表示与数据判断。\n\n学习率日程改变时间上的步长。较大早期步长可能加快移动，也可能不稳定；后期减小有助于细化，warmup 与余弦安排也需要具体任务证据。恢复训练时，除模型参数外还应保留优化器状态与日程位置。\n\n下面的小实验只考察同一个二次目标，使用固定初值与相同步数。它不构成 SGD、Momentum、Adam 在图像任务中的性能排名。先写下你对 η=0.05 与 η=0.6 的预测，再运行。\n\n**先判断**：若两个架构只报告最终准确率，学习率和训练预算不同，能否把差异全部归给结构？\n\n**核对提示**：不能。应报告并尽量对齐训练条件；至少检查训练曲线、验证选择规则和预算，区分表达能力与优化可达性。\n\n**推导时可用的关系式**\n\n$$\\theta_{t+1}=\\theta_t-\\eta_t\\nabla_\\theta\\mathcal L_t$$\n\nSGD基本更新；mini-batch引入梯度估计噪声。\n\n**来源与继续阅读**\n\n- [D2L · Momentum](https://d2l.ai/chapter_optimization/momentum.html)\n- [CS231n 2026 · Regularization and Optimization](https://cs231n.stanford.edu/slides/2026/lecture_3.pdf)\n- [Kingma & Ba · Adam (2014)](https://arxiv.org/abs/1412.6980)\n- [D2L · Learning Rate Scheduling](https://d2l.ai/chapter_optimization/lr-scheduler.html)\n- [D2L 5.3 · Forward Propagation, Backward Propagation](https://d2l.ai/chapter_multilayer-perceptrons/backprop.html)\n- [D2L 7.6 · LeNet](https://d2l.ai/chapter_convolutional-neural-networks/lenet.html)\n- [He et al. · Deep Residual Learning (2015)](https://arxiv.org/abs/1512.03385)",
   "id": "30bce775135149f593b099267a905521"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "b0ff54724c9847d28d78e53b34bde792",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-44"
   },
   "source": "## 6. 新坐标中的简单读出，与学习是否成功",
   "id": "b0ff54724c9847d28d78e53b34bde792"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "22ede921d6c9424faced67670c2a8f85",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-45"
   },
   "source": "MLP 可写成 h=σ(W₁x+b₁)，s=W₂h+b₂。非线性隐藏层让表示随参数改变，最后一层仍可采用线性读出。若去掉中间非线性，仿射映射的复合仍是仿射映射。\n\n另一个手工构造的例子是 x∈{−2,−1,0,1,2}，两端 ±2 为外类，其他为内类。令 h₁=max(x,0)，h₂=max(−x,0)，则 h₁+h₂=|x|，以 1.5 为阈值便可分开。它证明所选表示存在一个可行解，不证明训练一定找到它。它与主讲两灯例子是不同的教学构造，不能混成一份实验数据。\n\n层级表示是在已有中间量上继续组合，不是每层重新获得一个独立标签。计算图记录乘法、加法、激活及其依赖；反向传播沿这些依赖复用局部导数。前向中间量与当前参数共同决定本次梯度，更新发生在求导之后。\n\n**先判断**：最后一层是线性的，是否意味着原始输入到答案的系统也是线性的？\n\n**核对提示**：只有前面也都是仿射变换、没有改变函数类的非线性时才可如此合并。线性读出在非线性特征空间中可以对应原空间的复杂边界。\n\n**推导时可用的关系式**\n\n$$h=\\sigma(W_1x+b_1),\\qquad s=W_2h+b_2$$\n\n先学表示h，再在h中计算类别分数。\n\n**来源与继续阅读**\n\n- [D2L · Multilayer Perceptrons](https://d2l.ai/chapter_multilayer-perceptrons/mlp.html)\n- [CS231n 2026 · Neural Networks and Backpropagation](https://cs231n.stanford.edu/slides/2026/lecture_4.pdf)\n- [CS231n 2026 · CNNs](https://cs231n.stanford.edu/slides/2026/lecture_5.pdf)\n- [D2L · Forward and Backward Propagation](https://d2l.ai/chapter_multilayer-perceptrons/backprop.html)",
   "id": "22ede921d6c9424faced67670c2a8f85"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "99402af5be884406b09f55f758ee681b",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-46"
   },
   "source": "## 从主讲继续：推导边界与研究来源",
   "id": "99402af5be884406b09f55f758ee681b"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "f58d7af988cd4313ad1391b449820405",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-47"
   },
   "source": "两灯的两个 ReLU 是手工构造的可行解，用来证明非线性表示能改变可分性；它没有运行一次优化来证明随机初始化一定学到此解。分数、概率、损失与参数更新是四个不同对象。自学时请把每一步写成输入、输出、可更新参数三列，再回到本本的优化诊断。\n\n**主讲研究来源**\n\n- [CS231n 2026 · Image Classification with Linear Classifiers](https://cs231n.stanford.edu/slides/2026/lecture_2.pdf)\n- [CS231n 2026 · CNNs](https://cs231n.stanford.edu/slides/2026/lecture_5.pdf)\n- [CS231n 2026 · CNN Architectures](https://cs231n.stanford.edu/slides/2026/lecture_6.pdf)\n- [D2L · From Fully Connected Layers to Convolutions](https://d2l.ai/chapter_convolutional-neural-networks/why-conv.html)\n- [D2L · Softmax Regression](https://d2l.ai/chapter_linear-classification/softmax-regression.html)\n- [Stanford CS231n · Linear Classification](https://cs231n.github.io/linear-classify/)\n- [D2L · Multilayer Perceptrons](https://d2l.ai/chapter_multilayer-perceptrons/mlp.html)\n- [CS231n 2026 · Neural Networks and Backpropagation](https://cs231n.stanford.edu/slides/2026/lecture_4.pdf)\n- [Stanford CS231n · Backpropagation](https://cs231n.github.io/optimization-2/)\n- [D2L · Optimization and Deep Learning](https://d2l.ai/chapter_optimization/optimization-intro.html)\n- [CS231n 2026 · Regularization and Optimization](https://cs231n.stanford.edu/slides/2026/lecture_3.pdf)\n- [Stanford CS231n · Optimization](https://cs231n.github.io/optimization-1/)\n- [He et al. · Deep Residual Learning (2015)](https://arxiv.org/abs/1512.03385)\n- [D2L · Forward and Backward Propagation](https://d2l.ai/chapter_multilayer-perceptrons/backprop.html)\n- [D2L · Minibatch Stochastic Gradient Descent](https://d2l.ai/chapter_optimization/minibatch-sgd.html)",
   "id": "f58d7af988cd4313ad1391b449820405"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "50984445e483436b86a027cde08966d2",
     "type": "text-cell-h2",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-48"
   },
   "source": "## 独立核对：先预测，再运行",
   "id": "50984445e483436b86a027cde08966d2"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "3f56f1da0bf54f73a63ddfef63d40780",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-49"
   },
   "source": "下面是完整、独立的小规模 Python 核对，只使用标准库；无需下载、安装、训练或访问外部服务。它保留“教学构造”的身份。先写预测，运行后解释哪一项支持判断，再只改一个条件复查。下方没有预填远端执行输出。",
   "id": "3f56f1da0bf54f73a63ddfef63d40780"
  },
  {
   "cell_type": "code",
   "metadata": {
    "deepnote": {
     "block_id": "79f25f97acd7416399490b45959b8082",
     "type": "code",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-50"
   },
   "source": "# 独立教学构造：二次目标与步长，不训练任何图像模型。\nimport math\ndef loss(w): return 0.5*(w[0]**2+10*w[1]**2)\ndef grad(w): return [w[0],10*w[1]]\ndef run(eta,steps=8):\n    w=[2.,1.]; trace=[loss(w)]\n    for _ in range(steps):\n        g=grad(w); w=[a-eta*b for a,b in zip(w,g)]; trace.append(loss(w))\n    return w,trace\nfor eta in [0.05,0.6]:\n    w,trace=run(eta)\n    print('eta',eta,'loss', [round(v,6) for v in trace])\nassert run(.05)[1][-1] < run(.05)[1][0]\nassert run(.6)[1][-1] > run(.6)[1][0]\nscores=[2.,1.,0.]\nsoftmax=lambda a:[math.exp(x-max(a))/sum(math.exp(z-max(a)) for z in a) for x in a]\nassert all(abs(a-b)<1e-12 for a,b in zip(softmax(scores),softmax([x+10 for x in scores])))\nprint('共同平移的概率：',softmax(scores))\n",
   "id": "79f25f97acd7416399490b45959b8082",
   "execution_count": null,
   "outputs": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deepnote": {
     "block_id": "45a34f661feb41ad88ec676b4fce5c5f",
     "type": "markdown",
     "source_block_id": null,
     "logical_key": null
    },
    "html_anchor": "cell-51"
   },
   "source": "**继续一步**：修改一个数值或条件，先写变化方向，再运行核对。不要删除断言来让代码“通过”；若主动改变了断言的前提，应同时写出新预期。机制小算例通过，只说明这一小段计算与预期一致，不等于完整图像实验或新架构训练成功。",
   "id": "45a34f661feb41ad88ec676b4fce5c5f"
  }
 ]
}