跳到主要内容

通读笔记 — shen-du-xue-xi-quan-shu

文本情况:epub 转码,公式是图片已丢失(只剩「公式为」后接空),但推导步骤的文字描述与执行结果的具体数字都在。代码清单同样被剥离,但「程序说明如下①②…」的逐行解释保留。引用时锚定有数字/有真实短语的散文段。

书基本信息:

  • 作者陈昭明(成大统计学士、清大工业工程硕士;IBM/工研院/ERP/电信/财经数据库;Python/ML/DL/AIoT 讲师;2018 铁人赛 AI 冠军;另著《开发者传授 PyTorch 秘籍》)。洪锦魁主编(台湾知名 IT 图书作者)。
  • 前言落款 2022-08,清华大学出版社简体版(台湾原版深智)。TensorFlow 2.X、Eager Execution、Keras 主力。
  • 作者自称「统计人」,主张 Statistical Programming:以程序验证代替定理证明。
  • 136 文件 = 前置4 + 篇扉页5 + 15章正文 + 图列表 + 字体授权(136-fm 导航跳过;03-fm 图列表跳过)。

第一篇 深度学习导论(ch1, files 05-10)

  • 05: 篇扉页,学生7问(AI寒冬?AI/DS/DM/ML/DL关系?开发流程差异?学习路径?为何先学数学?TF还是PyTorch?环境?)。
  • 06 (1-1 三波浪潮): 1956达特茅斯;1957 Rosenblatt 感知器(无法解多层,1980s才解);1969 DARPA砍经费第一寒冬;1980专家系统(内隐知识外显为规则,不切实际+大型机贵,被PC盖过)第二寒冬;2012 Hinton团队 AlexNet ImageNet 错误率降十几个百分点→第三波。第三波优势:①由下往上(影像/语音/文字→应用);②硬件(摩尔定律18个月~2年晶体管翻倍;云端 pay-as-you-go 几分钟开通;GPU/NPU,NVIDIA市值超Intel;树莓派/Jetson Nano边缘);③算法解封(上百层模型、上兆参数);④大量数据搜集+标注。作者猜测短期不会寒冬。
  • 07 (1-2 学习地图): AI⊃ML⊃DL。四阶段:数据科学(Python/R/Hadoop/Spark)→ML(回归/Logistic/SVM/K-means;半监督/自学习/联邦学习)→DL(Deep=多层架构;NN+RL;优化或try-and-error)→Capstone。数据挖掘重 Pattern 挖掘,ML 重预测。
  • 08 (1-3 应用): 垃圾信过滤/电商推荐/人脸登录/语音输入/客服ChatBot/制造机器人。热门研发:疾病诊断新药/ChatBot/目标检测人脸/自驾/机器人。
  • 09 (1-4 开发流程十步): 搜集数据→清理+EDA→特征工程→数据切割(训练/测试,Out-of-Sample公正性)→选算法→训练→计分→评估→部署(Web Services API)→预测。与一般系统差异:先产模型再预测,重用性高;大量历史数据做「饲料」;新数据回馈再训练。
  • 10 (1-5 环境): Anaconda→pip install tensorflow→DLL 报错装 MSVC 2019 runtime;GPU 需 CUDA Toolkit+cuDNN 且版本配对;低端显卡 OOM 别装。Colab:免费 Tesla K80 12GB,Docker 限连续12小时回收,TPU=Google自研NPU。范例全部 Notebook。

ch2 神经网络原理(数学基础, files 11-17, 约34k)

  • 11 (2-1): 四学科:线代/微积分/概率统计/线性规划。NN求解全用上:正向传导=线代算误差损失;反向传导=偏微分算梯度+线性规划优化;统计串全环节;推论以概率为基础。作者主张:跳过证明,以程序大量个案验证(Statistical Programming)。比喻:不懂假设乱套公式=无视交规飚车。
  • 12 (2-2 线代): 张量=0维纯量/1维向量/2维矩阵/更高维。向量长=欧氏距离(np.linalg.norm),方向=tan^-1。加减常数→长向都变;乘除常数→长变向不变。内积用 @ 不是 *。夹角 cos^-1。矩阵乘 (m,k)×(k,n)=(m,n),左上=(1,2,3)·(9,7,5)=38,右上=32。A×B≠B×A。转置 (A^T)^T=A;反矩阵须方阵+非奇异;A@A^-1=I。奇异例:第二列=第一列+1,第三列=第一列+2。联立方程 x+y=16, 10x+25y=250 → X=A^-1B → x=10,y=6;三变元例解 (12,-20,-10)。np.linalg.solve。
  • 13 (2-3 微积分): 微分=变化率。y=2x+5 斜率2截距5(bias)。极限存在条件:左右极限相等(连续)、不为±∞。f(x)=-10x²+100x+5 一阶导=-20x+100,x=5 时最大值 255;x²+2x+7 导=2x+2,x=-1 最小值 6。二阶导常数正→最小值,负→最大值;三次以上斜率0点可能只是局部最佳(local)。微分定理:常数0/常数倍/加减/幂规则 x^n→nx^(n-1)/乘积/商/链式法则。SymPy 验证:链式例结果 6x^5;乘积例 5x^4。偏微分:其他变量视为常数;f(x,y)=x²+y²→∂/∂x=2x,∂/∂y=2y。梯度下降四步:任意起点→算梯度→x新=x-学习率×梯度→重复至梯度≈0。lr=0.9 可能跳过最小值;lr=0.01 提早停止(加周期)。简单线性回归 OLS:MSE=SSE/n,对 b 偏微分→b̄ 关系,对 w 偏微分代入化简;世界人口数据 year=x: w=0.061159358661557, b=-116.3563;polyfit 验算一致。积分:quad(),∫x² 例积分值 4.5;正态 N(0,1) 全域积分=1.0;±1σ=68.3%,±2σ=95.4%,±3σ=99.7%,±1.96σ=95%。
  • 14 (2-4 概率统计, 15k): 数据集/观察值/特征/目标(y)。定性(名义→One-Hot哑变量;有序→XL4 L3 M2 S1)/定量(离散→分类,连续→回归)。抽样:母体/样本/分层抽样;random.sample 不放回[1,6,2,8,5],random.choices 放回[8,4,7,4,6];StratifiedShuffleSplit 每类各2个vs不分层0:1个1:3个2:2个。描述统计:平均数/中位数(抗离群值:[100..500]均=中=300;500→50000 后均=10200 中=300)/众数;级距;百分位;变异数。美国总统身高42人:mean=179.738,median=182,mode=183,range=30,std=7.016,min163 max193,Q1=174.25。箱形图:中线=中位,箱=Q1~Q3 50%,离群值勿直接删(探究原因/更多样本稀释)。图:直方/饼/折线/散点/气泡/热图(corr)。概率:实验/样本空间(掷两次4样本点)/事件(红牌26样本点)/P=样本点数/总样本点数;两正1/4,一正一反1/2。独立/相依(抽牌不放回:第一张红后第二张红=25/51,黑=26/51)/互斥(晴1/2阴1/4雨1/4,非雨=3/4)。定理:独立P(A∩B)=P(A)P(B);互斥P(A∪B)=P(A)+P(B);相依∪=P(A)+P(B)-P(A∩B);互斥事件概率和=1。排列vs组合(正反/反正:排列4组合3)。10球抽3排列=720。掷3次正面组合1/3/3/1。二项分布 p=0.4 掷3次:0次0.216/1次0.432/2次0.288/3次0.064;binom.pmf。今彩539(39选5):组合575757种;头奖1/贰170/叁5610/肆59840;平均中奖27.92元→回报率-44.16%。分布:PDF/CDF/PMF(离散叫PMF)。正态=高斯,μ+σ,简写N(μ,δ)。Student's t 近正态用于假设检定。均匀=掷骰。伯努利 f(x)=p^x(1-p)^(1-x);二项=多次二分类;多项=多次多分类。掷骰子10次恰各...0.01152;60次每点10次=4.007e-06(样本空间更大)。泊松=给定时间k次事件(柜台/车险定价),λ平均次数。置信区间:点估计不精确(样本恰=平均数概率只有0.4);95%→±1.96σ。总统身高:mean179.74 std7.02,95%CI=(165.71,193.77);N(5,2)万样本 norm.interval=(1.0487,8.9326)。中心极限定理:每批样本平均数的分布→正态;标准误差=σ/√n(例:n=10→除√10);二项万批每批100:mean=0.5003,std=0.04982≈理论0.05。假设检定:α=5%;单/双尾,单/双样本;A/B Test=实验组新药vs对照组安慰剂;原假设H0/备择H1;「不能拒绝」不说「成立」。特朗普190cm 在CI(165.99,193.49)内→不显著。t检定:问卷例 t=2.0250,p=0.024<0.05→显著;专家改用p值=p=1-CDF,不用比较1.645。双样本 t=2.2390 p=0.0129 新药显著。配对检定期末60.90 vs 期中60.14:t=1.0159,p=0.1561>0.05 不显著。串成市长选举流程:抽样→描述统计→概率→假设检定,古典统计与ML互补验证。
  • 15 (2-5 线性规划): 目标 z=3x+2y max,限制 2x+y≤100, x+y≤80, x≤40 → pulp 解 x=20,y=60,z=180;顶点法(单形法)但DL变量几百个→用优化逼近。还有整数/二次/非线性规划。客服排班应用。
  • 16 (2-6 OLS 与 MLE): 「倚天剑与屠龙刀」。OLS 矩阵形式:SSE=(y-wx)^T(y-wx) → y^Ty-2wx^Ty+wx^Twx,对w偏微分→正规方程(公式图失)。波士顿房价14系数(W第一项-0.108...最后一项36.46),Sklearn 验证一致。leastsq() 逼近法解 x²+5 最小:22 周期,x≈1.73e-05,fvec=5;起始点差→慢收敛(Convergence)。复杂函数/多变量数学难解→逼近法实用,梯度下降是典型。MLE:找使「出现目前事件概率最大」的参数;多个独立样本→联合概率=连乘;取对数(顺序不变)→偏微分→一阶导=0;解出的μδ与常见公式一致。例:x=1 在 N(0,1) PDF=0.24。x=1,3 两点:N(1,1) vs N(2,3) 前者可能性大。样本组求解 SymPy:(3.62,-1.57),(3.62,1.57),NumPy 验证 (3.62,1.57)。
  • 17 (2-7 神经网络求解): 生物神经元→AI 网络简化。完全连接 FC:第二层后每神经元=一条回归线的 y,特征=前层神经元。y=w11x1+w22x2+..+b;z=w·y+b。NN=多条回归线组合。乘非线性激励函数(Activation Function;作者说「激励函数」不能表达原意故直接用英文)才能解非线性问题。梯度下降=下山比喻(选坡度最大的叉路)。损失函数/目标函数/成本函数同义,本书统一「损失函数」。范例1 f(x)=x²:损失序列 [5, 2, 0.8, 0.32, 0.13, 0.05, 0.02, 0.01, 0, 0, ...] 收敛到0;x_start=-5 同解。范例2 f(x)=2x⁴-3x²-20:lr=0.3→「Result too large」溢位(跳过最小值往左,损失越来越大);lr=0.001+epochs=15000→x=0.51 最小。更新公式:新x=现x-lr×梯度。NN求解=正向传导(算预测值→MSE)+反向传导(偏微分+链式法则逆算每层 w,b,W_t+1=W_t-学习率×梯度)反复,直到损失不再明显改善。梯度公式证明:MSE→SSE→矩阵 y²-2ywx+w²x²→偏微分→常把系数2拿掉→调整后权重=原权重+(学习率*梯度);有些文章把负号并进梯度→原权重-学习率×梯度。换损失函数梯度不同;加 Activation 更复杂——框架自动微分代劳。自定义损失会产生意想不到的功能:风格转换合成两图、GAN 产生乱真图像。这句是全书伏笔

第二篇 TensorFlow基础(ch3-5, files 18-39, 约50k)

  • 18 (篇2扉页): TF=Google Brain 2015 发布,占有率最高,1.4 纳入 Keras。
  • 19 (3-1): Python/C++ 流行框架剩四种;TF、PyTorch 前二(Arxiv 论文采用率);C/C++ 用 Caffe。本书只讲 TF/Keras。
  • 20 (3-2): 框架三大功能=张量运算+自动微分+神经层。三个版本:TF(一般机)/TF.js(网页/边缘/Docker/K8s)/TF Lite(移动/IoT)。2.x 后以 Keras 为主轴重写整合;Chollet 宣告 Keras 独立框架不再升级→写 Keras 应以 TF 内嵌版为主。TF2 默认 Eager Execution,舍弃 Session;1.x 程序会报错。补强项:GradientTape/Dataset/Callback/Estimator/Keras Application/TF Hub/TensorBoard/TF Serving。
  • 21 (3-3 张量运算): 遵循 NumPy 设计含传播(Broadcasting)。显示值须 .numpy()。reduce_sum([1,2,3])=6(沿轴加总输出少一维)。tf 自动决定 CPU/GPU:constant 放 CPU,变量放 GPU,加总时自动搬;PyTorch 必须手动搬。首次执行 CPU 64ms vs GPU 311ms(暖机),多次后 CPU 58ms vs GPU 1ms。稀疏矩阵(只存非零位置+值)。GPU 内存回收不完美→GEMM 错误;Notebook 关文件不回收,须 Kernel>Restart 或限配额。tf_upgrade_v2 可整目录升级。
  • 22 (3-4 自动微分): GradientTape: f(x)=x²→f'(3)=6;常数要 watch,tf.Variable 自动参与。二阶导:再套一次→f''(3)=2。多变量+persistent=True,dy/dx=6, dz/dx=108(z=x⁴,f'=4x³)。PyTorch 对照:requires_grad=True/y.backward()/x.grad。简单线性回归: assign_sub 相当于-=;结果 w=0.9464, b=0.0326;损失随周期递减;回归线居样本点中线。
  • 23 (3-5 神经层): 神经网络=输入层/隐藏层/输出层;隐藏层≥2 层即称深度学习。Keras 数十种神经层分五类(Core/卷积/池化/循环/前置处理)。范例1 Dense 单层拟合 y=wx+b:w=0.8798,b=3.5052(随机数据),只须 model.fit。范例2 华氏摄氏换算:F=C×9/5+32,产生151笔数据训练,测 C=100→F=212.00、C=0→F=32.00 完全正确;学到 w=1.8000,b=31.9999≈公式;「换算公式也是一条回归线」——好主走查素材!
  • 24-25 (4-1 第一个NN): MNIST 60000训练+10000测试,28×28,像素0255(0白255黑,与RGB相反)。TF2 官网首页超短程序回击 PyTorch,10多行准确率9798%。十大步骤完整版:EDA→特征缩放(x-min)/(max-min)→模型(Flatten 压扁784→Dense 128→Dropout 0.2→Dense 10+Softmax)→compile(Adam+sparse_categorical_crossentropy)→fit(validation_split=0.2, epochs=5)→evaluate: loss=0.0833, accuracy=0.9743;predict_classes 前20全对;第9张 5和6概率相近→可设门槛0.8提高可信度。参数计算:dense_5 输出参数1290=10×(128+1)。11个学员问题实验:①加一层 Dense/Dropout→0.9733 微降;②128→256→0.9764 微升(引 Deep Learning with TensorFlow 2.0 and Keras:有极限,超过不升反降;训练时间变长);③relu→sigmoid→0.9762 略低;④metrics 用 CategoricalAccuracy 0.9781+precision 0.9810+recall 0.9751(注意别用 Accuracy 否则数值极低);⑤Dropout 0.2→0.1→0.9755 略升,过高陡降;⑥epochs 5→10→0.9785,过多→过拟合反而降;⑦准确率不可能100%(近似解+测试数据分布可能不同);⑧FashionMnist 只换一行加载数据,「模型不是真的认识0~9,只是统计像素分布位置(KDD)」;⑨4位数→图像分割或UI设计4格;⑩官网是最新信息来源。多参数组合调校:Keras Tuner/hyperopt/Ray Tune/Ax。辨识率高的模型看不出调参效果,要拿 FashionMnist/CiFar。
  • 26 (4-2 Keras模型两类): Sequential 顺序型(除第一层外不需设 input_shape;pop() 删最上层,堆栈后进先出);Functional API(非直线、共享层、多输入输出、Split/Merge)。范例:3输入2输出,concatenate 合并 128+32+12=172。
  • 27 (4-3 神经层): 11类。Dense 参数计算:第一层 100480 个(784×128+128),第二层 1290。Dense 参数:units/activation/use_bias/bias_initializer/kernel_initializer(默认 glorot_uniform 均匀分布)/kernel_regularizer(L1/L2)/constraint。Dropout:每 Epoch/Step 随机丢输入神经元,只在训练时运作,预测时无作用;rate∈(0,1);经验上 NN 中比 Regularizer 有效。
  • 28 (4-4 激活函数): Output=af(Σxw+bias)。ReLU=隐藏层最常用;threshold(超过才>0)/max_value(上限)/alpha(<阈值 y=x×alpha;0.5=PReLU,0.01=Leaky ReLU)。比喻「轻碰皮肤大脑不反应」。sigmoid=Logistic 回归,S型,min0 max1,二分类,平滑非阶梯,降低预测变异性。tanh:min -1 max 1,比 sigmoid 陡。softmax:转概率,和为1,多分类,输入须二维。可自定义;可当参数包进 Dense。
  • 29 (4-5 损失函数): 三类:概率类(二元/多元交叉熵)、回归类(MSE)、铰链(Hinge,SVM/最大间格)。熵=不确定度 s=-∫p log p dx 或 -Σp log p;二元交叉熵 s=-y log(p)-(1-y)log(1-p):y=0→-log(1-p),y=1→-log(p);配 sigmoid。例:两笔数据 BinaryCrossentropy=0.8149(手验一致);CategoricalCrossentropy=1.1769;Sparse 版输入单一整数省 One-Hot。MSE 例 ((1-1)²+(0-1)²)/2=0.5;sample_weight;reduction=SUM 取 SSE。Hinge:Σmax(1-y_true×y_pred,0),y_true 通常±1,0/1 自动转,单边损失;例=1.3。自定义损失=输入 y_true,y_pred 输出常数。
  • 30 (4-6 优化器): 两大作用:①加速收敛②避开马鞍点/局部最小找全局。八种:SGD/RMSprop/Adam/Adadelta/Adagrad/Adamax/Nadam/Ftrl。梯度下降三种:批量BGD(全部样本)/SGD(单样本,快但曲折,好坏样本)/小批量(折中;批量=全部即BGD,=1即SGD;通称SGD)。更新 w=w-lr×g;动能 momentum:velocity=momentum×velocity-lr×g; w=w+velocity;远时放胆迈大步,近时步幅小。nesterov=NAG。x²/2 损失每10步打印趋近0。Adam(Kingma 2014「Adam: A Method for Stochastic Optimization」计算效率高、内存少、适合大数据多参数):beta_1一阶动能衰减/beta_2二阶/epsilon/amsgrad。SGD 50步收敛 vs Adam 10步。Adagrad:每参数学习率不同(常变动特征小lr,稀疏数据);RMSprop:除以均方梯度指数衰减;Adam=Adagrad 改良。作者:研发是小宇宙,但本书以实务为主。
  • 31 (4-7 效果衡量指标): 混淆矩阵:TP/TN/FP(型一α)/FN(型二β)。Accuracy=(TP+TN)/全;Precision=TP/(TP+FP);Recall=TP/(TP+FN);F1=调和平均 1/(1/P+1/R)。Covid 例子:降阳性认定值→伪阴性少但伪阳性多→资源浪费/医疗崩溃→政府随时调整。故障设备悖论: 染病率1%,设备一律判阴性,准确率竟99%→不平衡样本必须用其他指标。精确率=验出阳性中真病比例;召回率=染病者中验出比例(漏网之鱼危害大)。ROC/AUC:各阈值下假阳率X真阳率Y,面积越大越好,有别于固定0.5门槛。损失函数也可当指标。范例:8笔 [0,0,0,1,1,1,1,1] vs [0,1,0,1,0,1,0,1]→TP=3 FP=1 TN=2 FN=2;accuracy=0.625;precision=0.75;recall=0.6;AUC=0.7792(TF)≈sklearn。
  • 32 (4-8 超参数调校): Keras Tuner:Hyperband(objective=accuracy, max_epochs=5, factor=3)→最佳 Dense输出160, lr=0.001。范围类型 Boolean/Choice/Int/Float/Fixed/conditional_scope;Tuner:Hyperband(全组合)/RandomSearch(大范围抽样)/BayesianOptimization(高斯过程,依前次结果定下次);Oracle=决定下次组合的算法。Hiplot 可视化 uid=7 最佳。「深度学习是黑箱科学+高维联合概率分布不熟,唯有大量实验;训练耗时,缩短调校时间是课题」。
  • 33 (5-1 特征转换): One-hot:9类→9变量;「避免被算法误认类别有顺序大小,如红蓝绿→『是红色吗/是蓝色吗/是绿色吗』而非1/2/3」。MNIST 改用 categorical_crossentropy 须先 One-Hot。Normalization→N(0,1)(类似 StandardScaler)。
  • 34 (5-2 存盘加载): 存:结构组态/权重含偏差/compile选项/优化器状态(断点续训)。SavedModel(目录,官方建议)vs H5(单文件,无法存自定义层)。get_config/from_config;JSON;只取权重;自定义层须注册;只加载权重不含 compile 须补填。
  • 35 (5-3 汇总结构图): summary 表格;layers 索引/名称;plot_model 须装 graphviz+pydotplus;.dot→.png;show_shapes/show_dtype/to_file。
  • 36 (5-4 回调函数): 埋事件:周期前后。EarlyStopping(patience=3 val_accuracy 没改善就停;预计20实际12次停)。ModelCheckpoint(断点存档续训:0.9859→再3周期→0.9902)。TensorBoard Callback(实时看;localhost:6006;Graph 选项看运算图)。自定义:on_(train|test|predict)_(begin|end)/batch/epoch。每批损失记录→起伏但整体向下(不是一路递减!)。除错:NaN/不收敛可逐批检查;self.model.get_weights() 取权重。
  • 37 (5-5 TensorBoard): 功能:指标曲线/运算图/权重直方图(histogram_freq=1)/词嵌入投影3D(输入king显近邻,Word2Vec+Cosine_Similarity,后续章节)/图片文字音频/程序剖析。PyTorch 也用 TensorBoardX——「竞争者也承认的优秀工具」。GradientTape 自训+tf.summary.scalar 写自定义内容。图片写入→CNN 章节可看卷积转换过程→「可解释的AI(XAI)」伏笔。效果调校 hparams:最佳 dropout=0.2,num_units=32,optimizer=adam,0.9775。敏感度分析:改观察值重预测/Partial dependence plots/UCI Census 范例(非DL)。
  • 38 (5-6 部署): 本地/云端/边缘(IoT Hub,传感器信号接收过滤分析后送数据中心)。Streamlit:不需 HTML/CSS/JS,纯 Python,streamlit run;上传图→缩28×28→反转颜色(RGB白255 vs MNIST白0)→辨识。TF Serving:高效服务系统,不写程序提供 API,gRPC+REST;只支持 Linux(作者用 WSL)。Docker 流程:pull tensorflow/serving→half_plus_two 模型(输入÷2再+2)→curl 送 [1.0,2.0,5.0]→回 [2.5,3.0,4.5];改 [10.0,...]→[7.0,...]。不用 Docker:apt 装 tensorflow-model-server;模型目录下须有版本号子目录「1」;传回辨识结果4。
  • 39 (5-7 Dataset): 类似 Python Generator,逐批读不爆内存;cache/prefetch/filter/map。产生方式:from_tensor_slices/from_tensors/from_generator/TFRecordDataset/TextLineDataset。iter+next 取批:8,3。reduce 一维=总计15;二维按列[7 9 11 13 15]。map×2;filter 偶数[2,4];repeat 复制×3(数据过少提高准确度);shard 分片给分布式 worker。MNIST:shuffle(10000)+batch(1000)→60批。图像 Dataset:Generator→增补(放大缩小偏移旋转裁切)→(32,224,224,3)+(32,5)。TFRecord:Protocol Buffer,跨平台跨语言二进制;tf.train.Example={"string":Feature},Feature=BytesList/FloatList/Int64List;序列化 b'\x12\x06...';parse_single_example 反序列化;官网 fsns.tfrec「Rue Perreyon」。TextLineDataset:interleave cycle_length=3;泰坦尼克 filter 生存者。prefetch:训练(CPU/RAM)同时读下一批;cache:留缓存减硬盘I/O(时间轴图)。

第三篇 影像(ch6-10, files 40-88, 约93k)

  • 40 (篇3扉页): NUI(影像/语音/文字)突破→自驾/无人机/智能家居/机器人/ChatBot。
  • 41 (6-1): Dense 用像素当特征与人不一致:①数字集中中央→中央像素重要;②像素相关非独立(1是垂直线);③人看线条轮廓非逐点。卷积=特征工程,把像素换成线条特征。卷积=逐步抽象化(Abstraction),删色彩背景;三层卷积后人脸轮廓依稀可辨。结构:输入(彩色各通道分别卷积再合并)→卷积层(输出特征图;卷积核非固定,由反向传导估出——与传统图像处理不同;后接ReLU)→池化(下采样降参数)→Flatten→Dense。
  • 42 (6-2 卷积): 滤波器(Filter=Kernel)对图像「乘积和」:裁切→对应相乘→加总=输出第一格→滑窗步进。补零 Padding:same(尺寸不变)/valid(变小;窗口不足=滤波器宽-1)。Stride=1/2(减参数)。Conv1D 只看上下文→语音/文字;Conv3D 立体;Conv2DTranspose=反卷积/上采样,由特征图重建图像;卷积+反卷积=AutoEncoder(去噪生成模型基础)。
  • 43 (6-3 各式卷积): 模糊(周围点平均,7×7小模糊/21×21大模糊,越大越糊;消红眼噪声);锐化(凸显中间点,对比明显);Laplacian 边缘(凸显外围→轮廓);Sobel X(列由小至大→垂直线);Sobel Y(行由小至大→水平线)。OpenCV/skimage。
  • 44 (6-4 池化): 卷积输出=笔数×W_out×H_out×滤波器数(4的倍数)→尺寸大;池化=每滑动窗口取最大值(MaxPooling)或平均值→窗口变一点,降尺寸保特征。例:2×2 stride=2,左上框最大6,右滑2步最大8。
  • 45 (6-5 CNN实践): 卷积用3×3或5×5(越大提大特征但忽略小特征);池化2×2 stride=2。MNIST 换 CNN:两组 Conv2D/MaxPooling2D,输入多一维色彩通道(单色1,RGB=3,np.expand_dims);准确率 0.9892 较 Dense 版略高。输出宽高公式 W_out=(W-F+2P)/S+1;验算:第一层 (28-3+0)/1+1=26;参数 32×(3×3×1+1)=320(+1为偏差);池化 (26-2)/2+1=13;第二层卷积 64×(3×3×32+1)=18496。两大特点:①部分连接(Locally Connected):卷积输出只连滑窗内神经元;比喻「拍手臂,手臂外神经元不收信号」;感知域(Reception Field);②权重共享(Weight Sharing):同一滤波器滑窗时卷积矩阵值一样→参数大减→训练不过长。为什么加色彩信道:狮子金黄/口罩白块易辨。Cifar10(50000/10000,32×32 RGB):转单色 rgb_to_grayscale→准确率只有32%;彩色→70%(显著)。连续两个Conv2D再接Pooling 也行,无硬性规定;CNN 不须指定滤波器种类,TF 自动配,参数训练中找。
  • 46 (6-6 数据增补): MNIST 98%但鼠标写的差很多——MNIST 是纸上写再扫描(深浅不一灰阶锯齿),与鼠标书写不同→实际应用要自收数据。数据增补=一张正常图转各式有缺陷图(旋转/偏移/拉近拉远/亮度),模型更强健(Robust)。ImageDataGenerator 参数:width/height_shift、brightness、shear(顺时针歪斜)、zoom、fill_mode(constant/nearest/reflect/wrap)、horizontal/vertical_flip、rescale。MNIST+增补:准确度没升但自绘9从无法辨识→可辨识;训练5s→12s(两倍多)。宠物数据集(Kaggle Cats and Dogs,Microsooft 下载):过滤不合格(表头无"JFIF"非图片)→训练/验证目录→增补→prefetch→类ResNet模型→binary_crossentropy;5 epochs≈76%,原作者50 epochs≈96%;测试「是猫的概率=97.27%」。Kaggle=AI竞赛网站。Albumentations 70种增补(含颜色)。
  • 47 (6-7 XAI): 「垃圾进垃圾出」;确认合理+改良算法(KDD→Wisdom/Feeling 要突破)。范例1 VGG16(16层卷积/池化)可视化滤波器:第一层各不相同,第15层又不同;重建输出:第一层有的抓线条有的漆黑;第9层还见线条,第17层抽象到认不出是鸟。范例2 SHAP(Lundberg & Lee;Shapley Value 出自博弈论分配利益→特征归因):TF2 有 Bug 须 disable_v2_behavior;每像素10个数值=各类贡献率,维度(10,1,28,28,1);红色=贡献大;中央是辨识重点,与认知一致。LIME 齐名。Class Activation Mapping 描绘热区(猴子的头颈)。
  • 48-49 (7 篇扉+7-1): 冠亚军模型100多层,自行训练几天~几星期。ImageNet ILSVRC 演进:2012 AlexNet 冠军错误率降10%+首度导入 Dropout;2014 亚军 VGGNet(VGG16/19=16/19层卷积池化);2014 冠军 GoogLeNet&Inception(多种尺寸 Kernel 让系统决定+引入 Batch Normalization 观念,论文 BN:Accelerating...Internal Covariate Shift);2015 ResNet(20层以上前面几层退化 degradation→残差 Residual,论文 Deep Residual Learning for Image Recognition)。Keras Applications 字段:Size/Top-1(一次就对)/Top-5(五次中一次)/Parameters/Depth。选用原则:重准确→ResNet152;部署手机→MobileNet(小文件)。ImageNet 100万张、1000类→1000类内直接套用,之外接自定义层只用中间层提特征。三种用法:完整模型/部分模型提特征/部分+自定义。
  • 50 (7-2 完整模型): VGG16 下载至 ~/.keras/models,vgg16_weights_tf_dim_ordering_tf_kernels.h5;weights=None(未训练)/imagenet/路径;include_top=True(含最后三层:Flatten+两个Dense)/False(notop)。大象侧面照:印度象0.719/非洲象0.241/图斯克象0.036;正面照:图斯克0.627/非洲0.330/印度0.043——正侧面都对,不用去背。ResNet50 老虎:0.866/tiger_cat 0.134/jaguar 0.0005。
  • 51 (7-3 部分模型): 图像相似度(3D模型网站/嫌疑犯比对/商品推荐)。include_top=False 提特征向量;cosine_similarity 介于(-1,1)越近1越相似;输出(13,7,7,512) vs 输入(13,224,224,3);tiger2 比对相似度最高 0.351,如预期正确。
  • 52 (7-4 转移学习): 为什么要预训练:①ImageNet 大量高质量数据(普林斯顿+斯坦福)+复杂结构;②较少训练数据(前半段已训练);③训练快(只练自定义辨识层)。两阶段:预训练模型(含 NLP 的 Transformer/BERT)+微调(Fine Tuning)。Flower 数据集 3670文件5类(2936训练/734验证);ResNet152V2:152层卷积/池化,总566层;输入(224,224,3);最后两层 GlobalAveragePooling+Dense(include_top=False 会移除);Function API 接自定义;cache+prefetch;训练准确率93.33%/验证87.74%;随周期增长验证准确率不再提高——预训练模型已把大部分层训练过。踩坑:Cifar 28×28 而 ResNet 输入(224,224)→自动放大→模糊→辨识差;大部分模型输入≥224。
  • 53 (7-5 BatchNorm): Ioffe & Szegedy 2015「Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift」。=特征缩放:前层输出标准化再转下层;γ(规模 Scale)β(偏移 Shift)训练中算出非事先设定;逐批处理非全部一起;通常加在 Activation Function 之前;ε 防分母0。未标准化→梯度大的变量先优化→收敛曲折。Covariate Shift:训练用黄狗辨识花狗失效;股价长期上涨模型失准→X 分布随时间变化模型失效。Internal Covariate Shift:权重随反向传导不断更新,层层回归,层数多输出渐偏;BN 每批标准化→分布全在 N(0,1)→不怕偏移。梯度消失/爆炸:权值共享 W^n,W<1 前层趋0(消失),W>1 趋∞(爆炸不收敛);BN 后梯度每批重算→不发生。原作者优点:收敛快/可用较大学习率/初始化容易/激活函数复活/准确率全面提升/类似 Dropout 防过拟合——用了 BN 就不必加 Dropout,避免效果加乘→低度拟合。「On The Perils of Batch Norm」实验:MNIST(白底)+SVHN(复杂背景);模型1合并训练(BN 矫正 ICS,准确度高)>模型2分别训练共享权值(数据不同共享不合理)>模型3分别训练分别 BN 不共享(最好)。
  • 54 (篇3b扉页): 目标检测/语义分割/人脸/风格转换/OCR。
  • 55 (ch8 目标检测): 一图一对象→多目标+位置。YOLO 发明人 Joseph Redmon 机器人煎饼照:要知道饼位置才能翻,两张以上要知道翻哪张。应用:自驾(实时路况闪避)/智能交通(两点位置算车速→拥塞/违规)/玩具无人机飞弹/异常检测(生产线瑕疵,PCB)/无人商店购物篮。
  • 56 (8-1): ILSVRC 2011 分类+定位→2017 物体定位/目标检测/视频检测。四类:语义分割(按类别划分像素,不区分实例;两只狗同色)/定位(单对象类别+位置)/目标检测(多对象)/实例分割(同类区分+重叠)。
  • 57 (8-2 滑动窗口): 检测=分类(是什么)+回归(在哪,左上坐标+宽高)。滑窗:裁剪→辨识→滑动→全图→缩图再来(影像金字塔 Image Pyramid)。
  • 58 (8-3 HOG): 方向梯度直方图=抓轮廓线条;切成区域(Cell)找方向梯度;对光线等环境变化较稳健。流程:正样本(不同视角尺寸背景)/负样本(相近对象更好)→SVM 二分类→Hard-negative Mining(扫负样本,误检=伪阳性,加进训练集重训,可重复,类似 Boosting)→滑窗+金字塔检测→NMS(Non-Maximum Suppression)剔除重叠窗口。人脸正样本13233个(62×47);负样本9批→转尺寸→27000批;GridSearchCV 最佳 98.77%;滑窗 55 个合格窗口→NMS(阈值 OverlapThresh 0.3~0.5;Felzenszwalb 发明,Malisiewicz 改良)→2个。ResNet50+滑窗检测斑马:重叠→少检一匹;自行车检到两辆——通用 CNN 不准,尤其重叠。
  • 59 (8-4 R-CNN): 滑窗缺点:窗口太多耗时/SVM 一次一类/重叠不准。2014 Ross B. Girshick「Rich feature hierarchies...」。流程:Selective Search 区域推荐(颜色/纹理/规模/空间关系合并→2000候选框)→warping 227×227→AlexNet 提特征(每框4096维)→SVM(一类一个二分类)→NMS(IoU 高=高度重叠过滤;IoU=交集/联集面积)→Bounding-box Regression 位置微调(中心点+宽高四变量,Ridge Regression/OLS 估算,推论参考原文附录C)。实践:IoU>70%正样本与<30%负样本各≥30;VGG16+自定义层;1000 epochs 原作者,笔者只20。缺点:①2000框逐个辨识久,区域推荐无自学能力;②2000×4096=8,192,000特征向量耗内存;③CNN/SVM/回归三模型复杂。40多秒一张图(Caffe/C++)→改良浪潮。
  • 60 (8-5 改良): SPP-Net(Kaiming He):一图全部候选框共用一个 CNN;SPP 层不管输入尺寸输出固定长度→接 Dense;缺点:SVM 与回归仍慢、特征向量占内存。Fast R-CNN:原图直接过 CNN→候选框对照换算特征(ROI pooling 固定尺寸)→一个 Dense 分类;缺点:selective search 找2000框仍久。Faster R-CNN:放弃 selective search,引入 RPN(Region Proposal Network);训练阶段挑9个尺寸的框=Anchor Box+滑窗。Detectron/Detectron2(PyTorch,Linux/Mac 或 Colab):Model Zoo 预训练;斑马照三个框[46.5,94.6,234.9,258.9]等,信赖度[0.9992,0.9986,0.9983];背景人群都检测到;做到实例分割(框+Mask);自定义数据集 Colab 几分钟;人体骨架;全景视频(作者测试出错)。
  • 61 (8-6 YOLO): 两阶段(Two Stage)先区域推荐再检测→速度瓶颈;一阶段(Single Shot):YOLO 与 SSD。Faster R-CNN 检测一次车开12英尺(1.5车身),YOLO 只开2英尺(1/4车身)(Joseph Redmon CVPR 2016 幻灯片,轿车8英尺)。YOLO 2016 提出到 v3 后作者离开,2020 已到 v5。快是牺牲准确率换来:①放弃区域推荐,K-Means 从训练数据找最常见的 N 种尺寸 Anchor Box;②图像划 s×s 网格,每格只查多种尺寸 Anchor Box 有无对象;③CNN 算每 Anchor Box 含对象概率;④同时算每格各种对象概率(假设每格最多一个对象);⑤合并找合格候选框;⑥NMS。C/CUDA 开发=Darknet。
  • 62 (8-7 YOLO环境): Alexey Bochkovskiy 版;OpenCV C 版+VS2017/2019+darknet.sln;x64;opencv_world430.lib;yolov4.weights;测试 dog.jpg:自行车92%/狗98%/货车92%/盆栽33%。Python 调 yolo_cpp_dll.dll 报错(缺依赖)。vcpkg 装20分钟+build 10分钟。项目应用应采 C/C++ 模块
  • 63 (8-8 TF用YOLO): 转权重为 .h5(Keras 重建 YOLO 模型+load_weights+save);或直接用权重文件。测试输出 [(1,13,13,255),(1,26,26,255),(1,52,52,255)] (三尺度);NMS 移除重叠;kite.jpg 标出人和飞行伞。
  • 64 (8-9 YOLO训练): COCO 80类。自定义:Open Images Dataset(350类)取三类 Balloon/Person/Dog 各限200;LabelImg 标注(pyqt5/lxml);标注格式 <类别ID> <中心X> <中心Y> <宽> <高>;cfg 修改:batch 64→16(4GB 显存 OOM)、subdivisions=16、max_batches=类别数×2000=6000、steps=80%/90%(4800,5400)、width/height=416、classes=3(970/1058/1146行)、filters=(类别数+5)×3=24(963/1051/1139行);obj.names/obj.data/train.txt/test.txt;训练8小时;宕机从 backup 最大周期续训;yolo-obj_final.weights;测试气球概率仅0.31 偏低(batch=16 或 max_batches 偏小)。要高性能 GPU,用金钱换时间
  • 65 (8-10 SSD): Single Shot MultiBox Detector;比 R-CNN 系快,准确率(mAP)比 YOLO v1 高,YOLO 升级后声量变小。采用 VGG+多个卷积层提特征图同时预测。Caffe 架构,Windows 未说明编译→TF OD API 内含 SSD。
  • 66 (8-11 TF OD API): CenterNet/EfficientDet/SSD/Faster R-CNN。Windows 安装:TF2.2+/CUDA10.1+cuDNN7.6.5/protobuf protoc 编译/COCO API/pip install。OOM 两策略:动态内存分配/固定2GB。载模型160.80秒 vs 另一方法0.5秒。视频检测(车辆;WebCam cv2.VideoCapture(0);night.mp4 夜景高速)。
  • 67 (8-12 mAP): mean Average Precision;类似 ROC/AUC:以 IoU 为基准算各阈值下 Precision/Recall,召回率X精确率Y;多分类取各类平均;阈值低精确率必高于阈值高→曲线调成粗线(右图)。
  • 68 (8-13 总结): HOG/R-CNN/YOLO/SSD;Faster R-CNN 慢但准,YOLO 早期牺牲准确率后几版大幅提高;边缘运算用轻量模型(快+省内存)。动态目标检测:姿态(Pose 运动姿势标准/提成绩)、手势、体感游戏、皮影戏。
  • 69-70 (9/9-1): 应用清单:语义分割/风格转换/影像标题/姿态/GAN/Deepfake。语义分割=每像素标记;应用:自驾/医疗(CT/MRI 病灶标示)/卫星/机器人。原理=CNN 特征提取+特征向量重建影像=AutoEncoder 架构(许多进阶算法的基础)。
  • 71 (9-2 AutoEncoder): Encoder(提特征,似 CNN 去分类层)+Decoder(重建)。噪声会被过滤→去噪(Denoising)。MNIST 加噪声训练:损失收敛,去噪效果好。非监督式,不需标注。VAE:编码输出不是常数而是正态概率分布(μ 和 log(δ)),译码按分布抽样→去噪更稳健,可生成影像;损失=KL 散度(衡量实际与理论概率分布之差,类似 MSE);0~9 分布图大致分离;生成样本无噪正确。
  • 72 (9-3 语义分割): 为避免池化丢像素信息,模型不用池化层。SegNet(反卷积放大还原)/DeepLab(多尺寸卷积→Score Map+CRF 内插还原)/RefiNet(反卷积耗内存→省内存法)/PSPnet(多尺寸池化=金字塔)/U-Net(生物医学广泛)。U-Net=AutoEncoder 变形,U 形;传统 AE 问题:编码使尺寸变小→噪声等信息传不到译码器(去噪恰当,但检测异常点如黄斑部病变→异常点被过滤掉,不恰当);U-Net 每段编码器输出与对称译码器相连(Skip connection)→重建不丢重要信息。实践 Oxford Pets 7390 样本;SeparableConv2D 按色彩通道分别卷积;output 4(取最大值判黑白,也有设1的);效果不错。
  • 73 (9-4 实例分割): Mask R-CNN(Facebook AI Research 2018)=Faster R-CNN 延伸,框+Mask。应用:去背/移除对象后周边颜色填补(观光照移除陌生人,PhotoShop 类似)。akTwelve Mask_RCNN+matterport 权重 mask_rcnn_coco.h5;尾巴没屏蔽到→精准去背需更多数据/周期/算法改良;三只斑马均可屏蔽。
  • 74 (9-5 风格转换): Prisma App(近20种画风,慢);美图 MTlab:投资1.99亿人民币,60+人团队,速度缩到3秒,美图秀秀+专属手机100多万台=少数成功 AI 商业模式。Gatys 2015 提出:重新定义损失函数(呼应2-7伏笔!)。内容损失=原图与生成图像素差异平方和;风格损失难点在量化画风→Gram Matrix(两特征向量点积=特征关联性,显现哪些特征同时出现=风格);风格损失=最小化风格图与生成图 Gram 差异平方和;各层加权 λ;总损失 J(G)=αJ_content+βJ_style,α/β 控制比重。VGG19 不含辨识层+自定义输出;500周期,刚开始变化大后渐少=收敛;生成一张290秒→难流行→Fast Style Transfer 研究;每次产生图像不同;同风格对新内容图要不要重训=不一定,值得研究(美图2亿才3秒,速度是商业模式关键)。高频问题(边缘特别明显)→正则化矫正。也可卡通化/美肌。
  • 75 (9-6 脸部辨识): 应用:智慧保全(门禁/机场/黑名单)/考勤/商店监控(VIP 折扣码/停留时间)/快速结账/人流统计(百货游乐园场馆容量)/情绪分析/社群照片标注。技术:脸部检测(用目标检测技术)/特征点检测(比对同一人)/追踪(视频中轨迹)/识别 Identification(N人中找最似)/验证 Verification(与护照大头照比对)。Haar Cascades(XML 级联分类器;早、快、实时;准确度较差伪阳性多;架构似卷积,滤波器扫描:「眼部比脸颊暗、鼻梁比脸颊亮」)。detectMultiScale:scaleFactor(每次缩小比例,小→多窗口)/minNeighbors(邻近合格窗口数,大→伪阳降伪阴升)/minSize/maxSize。眼睛少抓一个、嘴误抓好几个=调参后较佳结果。MTCNN(Kaipeng Zhang 2016):影像金字塔+三网络 P-Net(建议,似区域推荐)/R-Net(强化,合格框)/O-Net(输出,特征点)——与 Faster R-CNN 类似;pip install mtcnn;特征点=眼鼻嘴角。face-recognition 库(dlib 基础,Windows 需 VS+CMake);face_locations 坐标逆时针上/左/下/右;视频追踪275帧,Lin-Manuel Miranda+Obama 编码向量比对;未检测到 Obama(正面照 vs 侧面画面);WebCam 实时;Raspberry PI 也可。特征点68个(shape_predictor_68_face_landmarks.dat;5点版也有);OpenCV 三算法:FacemarkLBF(Ren 2014,3000FPS)/FacemarkAAM(Tzimiropoulos 2013)/FacemarkKamezi(Kazemi & Sullivan 2014,One Millisecond);Lena 图:LBF 准确但帽子遮蔽检测不到;AAM/Kamezi 遮蔽处多错误点。验证:face_encodings 编码+compare_faces→[True,True,True,False] 完全正确;dlib 自写函数,法向量距离越小越相似。
  • 76 (9-7 OCR): 影像修复 Inpainting(抹除不喜欢对象)/3D 建构。应用系统:防疫(口罩/社交距离)/交通(拥塞/车速/越线闯红灯)/制造(机器手臂视觉)/企业(考勤监控)。Tesseract:HP 2005 开源,C++;UB-Mannheim .exe;pytesseract;-l eng 英文,--psm 6 单一区块;发票几乎全对(特殊符号误判);只辨数字 outputbase digits;限字符/黑名单;tessdata_best 各国字库。也有人用来破解 Captcha。
  • 77 (9-8 车牌): ANPR;机车检验/停车场(进场记录出场扣款)。流程:灰阶→提取轮廓→等高线区域排序取前10→找四点区域(近似多边形)→绘多边形框车牌→去车牌外图像算宽高→仿射变换(Affine,偏斜梯形转矩形;等高线点逆时针排列,第一点在上或左)→OCR。HR.26 BR 9044 有误认符号,去除后完全正确;NAX-6683→NAY-6683(X 误 Y,台湾字形不同)。镜头远近致车牌过大过小都会错→距离固定;画面杂乱→OCR 不到字就找其他等高线区域。收集/整理数据/特征工程占项目85%时间;与 Kaggle 截然不同;成功藏在细节里
  • 78 (9-9 CNN缺点): ①位置无差异性(Position Invariant):不管特征位置只认局部窗口→五官移位的脸同样辨识;②旋转倾斜无法辨识(侧转近180度);③坐标转换(上下颠倒)难辨。→Hinton 提出胶囊算法(Capsules)改良。
  • 79-80 (10/10-1 GAN): 深度伪造:名人色情片八成是伪造(统计)。LeCun:「GAN及其变形是近十年最有趣的想法」→GAN 一炮而红,Goodfellow 成红人。2018-10 纽约佳士得首幅 GAN 肖像画 Edmond de Belamy 432500 美金,画作右下角列 GAN 损失函数。每28分钟一篇 GAN 论文(统计)。比喻:伪钞制造者(生成模型 Generative)vs 警察(判别模型 Discriminative)。流程:①先练判别(D(x)≈1 真,D(G(z))≈0 假);②生成网络从噪声 z(正态/均匀分布)造假;③透过判别网络反向传导更新生成网络权重→反复至逼真。判别损失=真数据判别+伪数据判别两项;D(x) 越大越好,D(G(z)) 调成 1-D 越大越好;取 log(概率相乘多次方难解→log 变一次方);生成损失=判别损失的右边多项式;合并 min-max;伪码用小批量梯度下降。
  • 81 (10-2 种类): The GAN Zoo 上百种。CGAN(姿势生成)/ACGAN(动漫人物)/CycleGAN(风格转换)/StarGAN(表情肤色发色性别)/SRGAN(低分辨率→高分辨率)/StyleGAN2(语义分割图→渲染实景,与语义分割相反)。修改损失函数即可产生不同效果→论文爆炸成长。
  • 82 (10-3 DCGAN): MNIST 生成数字。生成网络:use_bias=False(尽量像素构成)、LeakyReLU(避免0→太多空白)、Conv2DTranspose(反卷积上采样,strides=(2,2)宽高各×2)、输出(28,28)单色。判别网络:似 CNN 但去池化层避免信息损失;生成图预测 -0.002(小),真图绝对值大。损失 BinaryCrossentropy+Adam;判别损失=真+假两部分的和。检查点(训练久防断)。@tf.function 产生运算图加速。50周期数字隐约成形;存图转 GIF 循环播放。名人脸部(img_align_celeba,202599 张,1.3GB,缩64×64):判别输入(64,64,3);生成输入随机向量(8×8×128);每周期存10图;正常需100周期才惊艳;笔者 PC 1周期2~3小时;1周期模糊,30周期仍不符预期。
  • 83 (10-4 Progressive GAN): NVIDIA 2017「Progressive Growing of GANs」;小图层层扩大到要求尺寸;多针对人脸;超分辨率(生成尺寸可大于训练集任何图像)。G 用类 Residual 层(原图+反卷积,权重 α 控比例);D 反向操作。8 颗 Tesla V100 训4天→TF Hub 有预训练模型。非线性插补(超球面上)两向量→平滑渐变动画;每5步骤一图;自定义图像脸部特写需一致效果好。
  • 84 (10-5 Conditional GAN): DCGAN 生成随机,无法控制生成哪个数字→加条件 y。Mirza 2014「Conditional Generative Adversarial Nets」;D(x)→D(x|y)。Fashion MNIST:标记也当特征变量,嵌入层转50维向量;真实数据标记1;指定标记生成该类图像,结果非常理想。ColorGAN:前置处理轮廓图当条件+噪声→生成与原图相似图像/灰阶上色。
  • 85 (10-6 Pix2Pix): Isola 2016「Image-to-Image Translation with Conditional Adversarial Networks」=CGAN 应用,像素级转换。应用:语义分割街景→实景/建筑外观→实景/卫星照↔地图/白天↔夜晚/轮廓→实物。生成网络=U-Net+Skip-connect(每层反卷积输入=前层输出+对称卷积层输出→保有原图特征);判别网络额外考虑输入图像(真图+生成图+输入图合一);PatchGAN:原生以单一像素辨,Pix2Pix 卷积切小区域,每像素与对应区域辨识。CMP Facade(12类:façade/molding/cornice/pillar/window/door);V100 一周期约15秒;下采样(1,128,128,3)/上采样(1,256,256,3);训练后预测图像已没有树木或栏杆。
  • 86 (10-7 CycleGAN): 处理非成对数据(成对=一原图对一目标图;非成对=不同场域 Domain)。Zhu 2017「Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks」。两个生成网络 G(X→Y)、F(Y→X)+cycle consistency losses:x→G(x)→F(G(x))≈x(Forward);y→F(y)→G(F(y))≈y(Backward);损失=L(G,D_Y,X,Y)+L(F,D_X,Y,X)+λL_cyc(G,F);λ 控相对重要性。应用:影像增强/彩色化/风格转换/马→斑马纹。借 Pix2Pix 结构;Identity 损失(输入Y与Y生成网络差异,正常应为0);每周期约1200秒(20分钟)×40周期≈15小时;原文作者执行200周期→「三天两夜」;测试效果比训练样本差=周期不足。
  • 87 (10-8 GAN挑战): 演化脉络(同一组学者):原生GAN+条件→CGAN;生成网络改 U-Net→Pix2Pix;两个 Pix2Pix 循环→CycleGAN;改损失函数产生各种效果;李宏毅 PPT。扩展:NLP/RL/高解析图像/虚拟人物/数据压缩/TTS/医疗/天文/物理/游戏。挑战:①图像模糊(NN 是求回归≈平均值→相似点平均;要大量数据+多周期;对超参数敏感:学习率/滤波器尺寸;初始不好→判别全判伪→生成器只产生少数类别);②梯度消失(生成太差→判真概率≈0→梯度太小无法改善生成器;用 leaky ReLU/简化判别/加周期);③模式崩溃 Mode Collapse(生成内容雷同缺变化;生成器专注擅长类别提高判别准确率;比喻:100/500/1000元钞票,擅长500就全做500);④训练时间过久。
  • 88 (10-9 深度伪造): BuzzFeed 2018「You Won't Believe What Obama Says In This Video!」嘴型声音逼真震惊世人→假新闻灾难。视频中换脸:说话头部转动各种角度→须收集特定人360度脸部图像→名人最易收集→流传最多是名人(政治人物/明星)。基础=GAN,类似 CycleGAN+脸部特征点(Landmark)置换。Recycle-GAN(Bansal 2018「Unsupervised Video Retargeting」):损失加时间同步相关性(Temporal Coherence):t+1 图像应是 1~t 的延续(似时间序列);演进:Pix2Pix 成对→CycleGAN 循环→RecycleGAN+时间相关。Face2Face、Lip-syncing。DeepFaceLab(按步骤执行脚本即可;比 GAN 需更强硬件;笔者未测)。反制:脸部边缘模糊/随机噪声/对称性;Microsoft Video Authenticator。科学发展必须兼顾伦理道德,否则好莱坞科幻剧情不再只是幻想,人类可能走向自我毁灭

第四篇 NLP与语音(ch11-14, files 89-120, 约82k)

  • 89 (篇4扉页): ChatBot 技术链:STT 语音识别→NLU 自然语言理解→文字生成/语音合成 TTS。
  • 90 (ch11): 图灵1950 图灵测试;Siri/小冰 启动 NLP 热潮。应用10种:文本分类/信息检索/文字校对/NLG/问答/机器翻译/自动摘要/情绪分析/语音识别/音乐。
  • 91 (11-1 词袋与TF-IDF): 语言高度模糊→先转向量再分析(与影像类似)。BOW:分词(Tokenization,中文复杂)→前置处理(词形还原/小写)→去停用词(be动词助动词代名词介词冠词;否则统计都是它们)→次数统计。范例 news.txt(South Korea's Convenience Store Culture):stores 15次/convenience 14次/korean 6次→猜韩国便利商店,与标题契合。BOW 缺点:only/most 非停用词但常出现不重要→TF-IDF=tf×idf 对跨文件常现词给低分;tf=目前文件次数/所有文件总次数;idf=总文件数/(出现文件数+1防0)。也可用于文本分类/问答配对:cosine_similarity 越近1越相似,问句与第一例句最相似,符合文意。
  • 92 (11-2 前置处理): NLTK(50+语料库;不支持中文)分程序与数据两部分;nltk.download();可复制 \nltk_data 目录。分句;分词;词形还原两法:Stemming 字根(快不一定对:keeps→keep 对,crashing→crash 对,his→hi 错,daily→daili 错)/Lemmatization 字典规则(慢但准,his daily 不变)。停用词+标点;正规表达式完全剔除;WordNet 相似词/相反词(ugly→beautiful)/说明/例句;POS Tagging 35种标签表(CC/CD/DT/EX/FW/IN/JJ/JJR/JJS/LS/MD/NN/NNS/NNP/NNPS/PDT/POS/PRP/PRP$/RB/RBR/RBS/RP/TO/UH/VB/VBD/VBG/VBN/VBP/VBZ/WDT/WP/WP$/WRB)。spaCy 留待词向量章节。
  • 93 (11-3 词向量): BOW/TF-IDF 只数次数不考虑上下文:「这间房屋有四扇?」→窗户;吃辣→麻婆豆腐。中文几万字→可否比照影像做预训练模型+转移学习?Mikolov 2013 Word2Vec,1000亿字训练;词嵌入=稠密空间(TF-IDF 是稀疏)。两法:CBOW(上下文预测单字)/Skip-gram(单字预测上下文)。CBOW 本质=深度学习模型;2-gram 例句「Hey, this is sample corpus using only one context word.」One-hot;上下文各n个单字;1000亿类太多→负样本抽样 Negative Sub-sampling:P(juice|orange)→P(1|<orange,juice>),多分类变二分类。CBOW 优点:简单、比传统确定性模型效能佳、省内存;缺点:Apple 一字多义取平均值失准、1000亿类收敛难。Skip-gram:一字预测多上下文解决一字多义+负样本抽样;负样本全放太庞大且不平衡。Gensim:LSI 模型(议题=所有单字加权组合);Word2Vec 训练 common_texts;参数 size/window/min_count/workers;(303,484,226,415,193,580)处理数亿字;dirty 相似词/france topn 6/「床、床单、枕头」+「长椅」反义/两词相似 0.7431163/较不相似=france。预训练模型:dog 向量300维;king - man + woman = queen(「woman, king」相似+「man」相反);cereal 与三餐较不相似;woman/man 相似 0.76640123。辛普生对话数据集:Bart 与 Nelson 相似度只有 0.5(朋友但不亲近)→特殊领域预训练模型打折。Doc2Vec 语句比对(Starbucks FAQ):「mobile pay」找到前10,其他语句不理想→改用 BERT 准确率提升许多。Embedding Projector(projector.tensorflow.org):3D、PCA/T-SNE/UMAP 降维、Isolate 101 points、Word2Vec All/10K/GNMT。
  • 94 (11-4 GloVe): Pennington 2014 斯坦福;Word2Vec 只看移动窗口没掌握全文→词汇共现矩阵(同时出现概率)。4个预训练:42B.300d(430亿词300维1.75GB)/840B.300d(8400亿,2.03GB)/6B.300d(60亿,822MB)/twitter.27B.200d(270亿,1.42GB)。文件格式:每行一个单字,空格隔开,第一列单字其余向量→读入转字典。love 词向量;欧氏距离找相似:king→'queen','monarch','prince','kingdom','reign','ii','iii','brother','crown';100个单字散点图:相似词集中在局部区域。
  • 95 (11-5 中文): Jieba:分词/关键词提取/词性标注;全模式(所有可能词组)/精确模式(默认)/搜索引擎模式(隐马尔夫链 HMM);set_dictionary 繁体 dict.txt;add_word:「三天三夜」原分为「三天三」+「夜」,加词后正确;extract_tags topK(经济日报「互联网平台切莫忽视用户导向」);stop_words 改进;posseg.cut。
  • 96 (11-6 spaCy): 64+语言;Word2Vec+BERT;pipeline 模型 lg/md/sm(en_core_web_sm/zh_core_web_sm);GPU spacy[cuda111];中文分词三选项 config.cfg:char(默认)/jieba/pkuseg(多领域,Precision/Recall/F1 比 jieba 好);displaCy 依存关系图(looking 主词 Apple,buying 受词 UK;127.0.0.1:5000);命名实体标注;繁体「大学」被切成两个词不正确→建议简体分词再转回繁体;OOV 判断(afskfsd 不在字典;须中型以上模型);相似度比较。
  • 97 (ch12): NLP 推断=上下文关联+记忆力(大禹治水)。轨迹:RNN→LSTM→Attention→Transformer→BERT。
  • 98 (12-1 RNN): 回归 Y=WX+B;RNN: h_t=W×h_{t-1}+U×x_t+b, y_t=V×h_t——t 时间点的 h 受前一时间点影响;同层前一神经元也视为输入(一般 NN 假设同层互相独立)。Embedding 层:RNN 系第一层必须是嵌入层,转稠密向量;input_dim=字典尺寸/output_dim=向量尺寸/input_length/mask_zero;输入(32,10)→输出(32,10,64);真实数据(10,4,64);One-Hot [34,33] 补0 (10,4);接 Dense 准确率80%,概率50%上下不肯定;加 simple_rnn(Vanilla RNN)→100%,正面≈1负面≈0;unroll=True 展开求解快但占内存。GloVe 300维词向量+trainable=False→100% 完全正确。
  • 99 (12-2 LSTM): Bidirectional() 包裹可考虑下文。RNN 重大瑕疵:权值共享(与 CNN 同):h_t=W×h_{t-1}+U×x_t+b 展开→W^n;W<1 梯度消失(上文长度有限),W>1 梯度爆炸不收敛。Hochreiter & Schmidhuber 1997 LSTM:额外维护记忆线(Cell State);四个阀:遗忘阀(σ,sigmoid 输出0乘原记忆=删除)/输入阀(x_t+h_{t-1} 经 σ 得 i_t,记忆用 tanh 介于(-1,1))/更新阀(旧记忆+新信息)/输出阀(正常输出×更新记忆)。IMDB 影评情绪分析:Embedding+LSTM+Dense,5周期 loss=0.3370 准确率86.63%;短句 "I like the movie" 不能得到正确预测(影评都很长)→用测试数据前两句;反转字典还原文字,空白索引也是0故用「,」隔开。文字数据集版:TF Dataset/Conv1D 比较/双向 LSTM。
  • 100 (12-3 LSTM参数): return_sequences(False 只回最后神经元输出/True 全回)、return_state(隐藏层状态+记忆状态)、stateful(前批状态传下批)。两 LSTM 串连前者必须 return_sequences=True;stateful=True 每周期后 reset_states。测试:输入3数值输出1个 [[0.10563352]];+return_sequences→3个输出 [[[0.02329711],[0.06432742],[0.11739781]]];+return_state→3个数值(输出+隐藏状态+记忆状态);两 LSTM 串连→[[[...]]]+状态。多输出须 Functional API。Stacked LSTM 提特征,常用于语音识别。航空营收预测(1949-01~1960-12,每月一笔):前三低 2/3 训练 1/3 测试(不随机切);特征正态化;LSTM+Dense(1);input_shape=(批数,落后期数,特征个数)。①前1期预测:RMSE 训练22.84/测试47.63;②前3期特征(X维度3):RMSE 22.83/62.55 更差——多期有移动平均效果,预测曲线平缓,不受激烈变化样本影响;③落后3期(time steps=3):27.19/66.19 更差;④stateful 分批(batch=1):25.91/51.74 略好(示范用法);⑤Stacked LSTM:24.28/86.85 最差——数据单一,太复杂反而没帮助
  • 101 (12-4 GRU): Cho 2014「Empirical Evaluation of Gated RNN on Sequence Modeling」;改良 LSTM:LSTM 计算过慢/太占内存→废记忆状态直接用隐藏层输出 h_t,遗忘阀+输入阀改由更新阀替代。原作者效能图表 GRU 优于 LSTM,但笔者实测差异不明显,网络上少提,主流仍 LSTM。
  • 102 (12-5 股价): 亚马逊股票(Kaggle 2005-2017);过去40期为特征,一次预测10天,测试20期;一次预测1天尚可;一次10天不理想;全部数据预测看似理想其实只是镜头拉远的效果;移动窗口间画线造成错觉。LSTM 预测股价不准确三原因:①股价非稳态(Non-stationary,均值标准差随时间变;时间序列通常转收益率 Return Rate 使稳态);②变化太大,长期历史预测不合理;③预测1天准但无意义(幅度有限),预测多天不准。回测(Back Testing);作者另有「算法交易实作」文。
  • 103 (12-6 注意力): RNN 取上文隐藏状态、LSTM 记忆线,都受序列顺序限制→越靠近预测目标权重越大;人类阅读会注意标题/人事时地物/强烈形容词=注意力机制;图像:婴儿脸/纸尿裤是热区。NMT=Seq2Seq(Encoder-Decoder 变形);Context Vector=Encoder 输出上下文向量(似 CNN AE 特征向量);注意力=译码器输入词汇乘权重与 Context Vector 混合成 Attention Vector 预测下一词,应用到译码器每一层。权重两种:Luong 乘法/Bahdanau 加法;FC+Softmax。虚拟代码:score=FC(tanh(FC(EO)+FC(H)));weights=softmax(score);context=sum(weights×EO);Attention Vector=concat(embedding output, context)。西英翻译(spa-eng.zip):编码器输出(64,19,1024);Attention 维度(64,1024),权重(64,19,1);译码器(64,4807 字汇表);补0不计算损失;检查点(训练10多分钟);每周期80秒;热图对角线=单字一一对照关联最大。Seq2Seq 五型态:one to one(影像分类)/one to many(影像标题)/many to one(情绪分析)/many to many(翻译)/many to many 同步(视频分类每帧标题)。
  • 104 (12-7 Transformer): Vaswani 2017「Attention Is All You Need」;衍生 BERT/GPT-2/GPT-3/XLNet/ELMo/T5。RNN/LSTM/GRU 最大缺点:序列依序训练慢;Transformer 自注意力机制并行计算所有输出。Q(Query=Decoder 前一期输出)/K(Key=Encoder 隐藏层状态键值=上下文词向量)/V(Value=Encoder 隐藏层状态输出值);三种权重(单纯注意力只有一种);输入向量乘三权重得 Q/K/V。步骤:点积 Q×K(相似度)→缩放 ÷√d_k(d 通常64)→Softmax 转概率→V 乘概率=重视的上下文。多头通常8个,内积串联。例句:The animal didn't cross the street because it was too tired——it 指 animal(自注意力找关联度)。效能:8颗 P100 训练3.5天;英德 BLEU 28.4;英法 41.8;BLEU=双语翻译指标,n-gram 相符数(不考虑顺序)×权重。GPT 须 AWS→只介绍 BERT。
  • 105 (12-8 BERT): Devlin 2018「BERT: Pretraining of Deep Bidirectional Transformers」双向 Transformer。Word2Vec/GloVe 一字一向量,一字多义无解(Apple/Bank);BERT 上下文相关 Context Dependent,输入句子而非单字:We go to the river bank(岸边)/I need to go to bank to make a deposit(银行)。两个训练策略:①Masked LM:15% 词汇以 [MASK] 取代,用未屏蔽预测屏蔽;计算:FC 分类→乘词嵌入矩阵得字汇表维度→Softmax 概率;②Next Sentence Prediction:预测第2句是否第1句接续;正负样本各50%;三种词嵌入:Token([CLS]句首[SEP]句尾)/Sentence(属第1或2句)/Position(第几位)——类似 Q/K/V。BERT GitHub:4~16个 TPU 训4天→下载预训练模型+微调。微调应用:分类(情绪分析 run_classifier.py)/问答(SQuAD 标示答案开头结束 run_squad.py)/NER;GLUE 数据集(Quora Question Pairs);BERT-Base;GPU 建议 Titan X/GTX 1080 否则 OOM。
  • 106 (12-9 Transformers库): 八功能:情绪分析/文字生成(限英文)/NER/问答/克漏字/摘要/翻译/特征提取。情绪分析:distilbert-base-uncased-finetuned-sst-2-english(SST-2 数据集微调);否定句也能正确分类(RNN/LSTM/GRU 碰否定句都无法);「don't hate 不讨厌但不意味喜欢」分数只有0.5;多语系100+,24模型;uncased_L-12_H-768_A-12=L12层/H768神经元/A12头;西法文测试不准确(分数非极端值)。问答:从训练数据节录一段当回答。填空 fill-mask 前5名分数。文字生成 GPT-2:max_length=50;do_sample=False 每次相同/True 每次不同(聊天机器人要变化:「How are you」有时 I am fine 有时 Great/Not bad);XLNet 短提示要 Padding(开放式设计),GPT-2 不用。NER:CoNLL-2003;##开头=与前词结合也是实体(##gging+Hu=Hugging);O/B-MISC/I-MISC/B-PER/I-PER/B-ORG/I-ORG/B-LOC/I-LOC。摘要:CNN+Daily Mail;T5=Text-To-Text Transfer Transformer,一个框架多种任务,最多输入512词截断。翻译 T5 en→de。微调三方式:TF2/PyTorch/Trainer;GLUE cola 任务(8551训练/1043验证/1063测试);指标 Accuracy/F1/Pearson/Spearman/Matthew;use_fast=True 快速分词;笔者 PC 训练20小时;from_pretrained() 加载微调模型。BERTology;ALBERT/TinyBERT 轻量;GPT-3 号称1750亿参数;Transformer 颠覆 NLP,准确率明显优势,触角伸向影像。
  • 107 (12-10 总结): RNN/LSTM/GRU/注意力/Transformer/BERT;情绪分析/NMT/相似度/问答/摘要/NER/时间序列。项目应用建议优先 BERT(准确度已超越 RNN/LSTM/GRU);成功源于细节。
  • 108 (ch13): ChatBot=NLP+句法+语意+NLU+NLG;结合语音识别+社群软件/智能音箱。
  • 109 (13-1 类别): 五类:①不限话题(天南地北,趣味性实时,不需精准)②任务型(专家系统,医疗/驾驶/航行/解密,规则式推理,精准不求实时)③FAQ(客服知识库,相似问题搜寻,正确+遵循话题+浅显易懂,避免重复空泛)④信息检索(Google 式全文检索,提供所有可能由用户判断)⑤数据库应用(SQL 查询订房订位,结合 NLP 语音接口)。「开工前先搞清需求」。
  • 110 (13-2 设计): 规划:订目标/收集 Use Case(机票:空位查询/旅程推荐/订票/付款/退换票)/内容为王(Content Marketing)/四种平台(软件包/ChatBot 平台:DialogFlow、QnA Maker/开发工具:Bot Framework、Wit.ai/自行构建:TextBlob、Gensim、spaCy、Transformers、Rasa、ChatterBot)/部署(云端微服务计费)/用户偏好与面貌。术语:技能 Skill(存提款/定存/换汇)/意图 Intent(查询空房/订房/换日期)/实体 Entity(人事时地物,NER 找出;订房要日期/房型/天数/身份证)/例句 Utterance(同一意图各种表达:「我要订3月21日双人房」「明天、双人房一间」)/行动 Action(信息齐→响应「订房成功」)/开场白(随机例句避免枯燥)。对话管理:FSM 有限状态机(IVR 按顺序,ATM/报修专线,错则退回)vs 槽位填充 Slot Filling(NLP,「我要订3月21日双人房」一句全处理,缺再问,不像「普通话请按1闽南话请按2客语请按3英语请按4」)。微软 Tay:推出不到24小时学会骂人讲脏话紧急下架;不能重复问相同问题,设跳脱条件,状态重复两次以上可能是 Bug。个人信息保护;让用户知道 ChatBot 能力范围。
  • 111 (13-3 实践): NLTK+Keras 例句47个/意图9个;词向量;相似度下限,低于→say_not_understand「我不懂你的意思」;DataFrame 筛选抽样,同问题不同回复。加强:中文语料/Streamlit 网页/LINE/更完整语料(SpaCy 分词慢,可改 NLTK)/整合数据库/NER 提实体。
  • 112 (13-4 框架): ChatterBot(配接器模式 Adapter Pattern,可扩充,多语系;本身无 NLP 只是文字比对;Hello→Hi there!;不在训练数据→随机抽过往对话;MathematicalEvaluation(mathparse)/TimeLogicAdapter(「The current time is 04:37 PM」)/BestMatch;storage SQL/MongoDB;自定义配接器三函数:init/can_process(statement.text.find('订位')>=0)/process)/ChatBotAI(样板语法+变量嵌入;REST API 整合 FB Messenger;学习/记忆/条件判断/主题式对话;wikipedia 库;「who is 杨振宁?」正确回答;increment/show/remember/tell me about)/Rasa(Open Source+付费;Markdown+*.yml;安装 --ignore-installed ruamel.yaml,Windows 加 --user;rasa init/shell/visualize/train;nlu.yml(NLU 训练数据意图例句)/rules.yml/stories.yml(故事情节)/domain.yml(Bot 回应)/config.yml(Pipeline+Policy);自定义行动 rasa_core_sdk:[Michael] (name) 实体标注;action_endpoint localhost:5055/webhook;「Hello 」成功;比较像传统 AIML,以例句当训练数据,相对僵硬,需大量人力维护,好处是精准控制回答)。
  • 113 (13-5 Dialogflow): Google NLU 平台;主要槽位填充+完整 NER(today/tomorrow/right now 自动转日期;全世界城市可辨识);CX 进阶/ES 标准免费。术语:Agent=ChatBot/意图(Training Phrases 不必列举所有,内建 ML 自动加类似词组;行动;参数必填选填;回应)/实体(内建系统实体:日期时间颜色 Email 多国语系)/上下文(识别意图→问缺的信息→满足才回答)/追问意图 Follow-up(Yes/No,sure/exactly 也认;寿命 Lifespan:一般意图预设5个对话,追问意图2个,超20分钟全重置)/履行 Fulfillment(Webhook POST/Inline Editor GCP Cloud Functions Node.js;正式项目选 Webhook)。实践:Gmail+GCP+服务账号+密钥+环境变量 GOOGLE_APPLICATION_CREDENTIALS+Cloud SDK+google-cloud-dialogflow;Default Fallback/Welcome Intent;@sys.language 检测 English;$language 变量;「you know js?」Required 则问「what is the language?」;ngrok 内网对应外网;Flask+SQLAlchemy;SQLite 记录订房数递增(tainan/2021-02-05 room_count+1)。「上述 Dialogflow 介绍的概念,几乎是业界的标准」
  • 114 (ch14): 语音识别挑战:个体差异(口音音调,男女音频差大)/环境噪声/语调(悲伤慢小低沉,兴奋快大)。讲话150~200字/分,打字只有60字/分;「一千种 No 的声波」。基础:信号处理/概率统计/语音语意学/NLP/ML。以简驭繁,焦点在实践。
  • 115 (14-1 语音基础): 声波:胸腔压缩+嘴唇舌头→空气压缩伸张,340米/秒;耳膜→内耳神经→大脑。数字化:取样(隔一段时间衡量振幅);模拟→数字。振幅(波高=大小)/频率(一秒周期数=高低)/相位(变化度量,度数,一周360度)。Hz;人耳 20Hz~20kHz,年龄增长高频不敏感。奈奎斯特定理:重建信号是取样频率的一半;电话 4kHz→取样8kHz;网络电话16kHz;CD 单声道22.05kHz 立体44.1kHz;DVD 48kHz 蓝光96kHz。量化:8位(电话)/16位(网络电话)/32位。编码:PCM(直接存振幅,效率不高)/非线性 PCM(高频低精度低频高精度)/可调变 PCM(切段分别编码正规化)。wav 最常见:16位+PCM。文件属性:取样频率8000/帧数268237/声道2/精度2/33.53秒=帧数/取样频率;PyAudio(Windows 须下载 whl)串流播放,每秒区块数7.8125,总区块130.97;随机数(-32767,32767)产生 random.wav(44100,99999帧,2.27秒);双声道转单声道。SpeechRecognition 麦克风+识别;pyttsx3 TTS;静默0.8秒结束;说话者 ID。识别实例:念「受台风影响,北台湾今天下午大雨特报,有些道路甚至发生积淹,曾文水库上游也传来好消息」→识别「…甚至发曾记殷曾文水库…」大部分对,错误均为同音异字;信赖度0.89820588;所有可能结果列表。
  • 116 (14-2 前置处理): Librosa。傅里叶变换:不规则波形=多个规律正弦波相加;s(t)=A sin(2π(ωt-φ));时域→频域;频谱 Spectrum/频谱图 Spectrogram(X时间Y频率,观察各频率能量)。特征提取:FBank/MFCC;前置处理:分帧(每帧25ms,重叠10ms 防边界遗漏)/信号加强(高频)/加窗(方窗/汉明窗,消两端不连续;帧叠加 Frame Stacking 合并相邻帧考虑上下文)/去噪。STFT=分帧+加窗+DFT 合并一步(SciPy stft)。实时频谱图;librosa.load(取样22050,总样本739329);melspectrogram→power_to_db→specshow;存档改 soundfile(v0.8 后不支持 write_wav);STFT 矩阵 D(1025,1445)complex64(频率×时间);MFCC n_mfcc 13或40→(40,1445);Log-Mel(128,1445);重取样;和音/打击音分离 hpss(打击音找节奏 Tempo=143.55 每分钟);色度图 Chromagram(12半音,pitch 周期循环);NMF 分离8成分(似 PCA),Components+Activations 重建=原曲,只用第一成分=大相径庭(音乐合成/修改);Pre-emphasis 高频加强(人对高频不敏感);正态化 minmax_scale。python_speech_features:MFCC(6705,13)/Filter bank(6705,26)。ffmpeg:转码/裁剪/取样频率/编码。
  • 117 (14-3 语音DL应用): 曲风分类(GTZAN 10类×100首×30秒:Blues/Classical/Country/Disco/Hiphop/Jazz/Metal/Pop/Reggae/Rock);MFCC→CNN 四维(1000,40,1077,1);800/200 切割;20周期准确率46%;训练99.89% vs 验证52.50%=过拟合;改善:数据分段(每文件10段→10000批:训练87.12%/验证69.44%/测试67.80% 明显改善;增补帮助不大);AveragePooling2D vs MaxPooling2D 实测差异不大。短指令(Google Speech Commands 30类:stop/play/up/down/right/left;约1秒);bed/cat/happy 三类(文件数1713/1733/1742);两个人发 happy 波形差异大(起始发音点不同)→须够多训练数据;np.pad+np.resize 统一1秒(少数文件过短影响准确度);npy 缓存;MFCC(5188,40,32,1);CNN 准确97.88%;预测 [[0.99,0,0.01]]=bed 正确/[[0,1,0]]=cat/[[0,0,1]]=happy;自行录音 2秒截中段1秒;自录准确率差强人意(发音欠佳/录音处理与训练方式不同)→建议自收训练数据;SVM+PCA 与 CNN 相同但训练快(MFCC 本身二维→拉平,PCA 降维)。短指令→整句不行→辨识目标细化到音素 Phoneme+语言模型考虑上下文
  • 118 (14-4 ASR): 指令操控/字幕讲稿。英文数万词分类复杂→改以音素为目标(区别意义的最小声音单位;词→音节→音段;bat=/b/æ/t/;Human=HH,Y,UW,M,AH,N;同音异字靠上下文);英文约40~50个,中文另含声调(一二三四轻)。四步骤:信号处理+特征提取(傅里叶/MFCC/LPC)→声学模型(特征→音素→拼音→字典比对词汇与得分)→语言模型(n-gram 依前词猜现词)→解码搜寻(综合得分找最可能词汇)。贝叶斯:P(W|O)=P(O|W)P(W)/P(O);P(O)不影响省略;P(O|W)=声学模型(GMM 高斯混合:非监督,多正态分布混合,MLE 推算统计量分群);P(W)=语言模型(HMM:前状态预测现状态;n-gram;声学也可 HMM:首音ㄅ则ㄆ绝不出现;bi-gram:and/but/cat)。GMM-HMM=数十年主流;2014 Google 双向 LSTM+CTC(Connectionist Temporal Classification)目标函数→深度学习涉足;工具箱仍多 GMM-HMM。解码:小词汇维特比 Viterbi 精确搜索;大词汇连续语音→光束搜寻 Beam Search/WFST(加权有限状态转换机)。
  • 119 (14-5 实践): Kaldi(Povey;C++;安装复杂,Shell 脚本→Linux;笔者没设备跳过):OpenFst(WFST 库)/Sclite(WER 错误率)/Sph2pipe/IRSTLM/SRILM/OpenBLAS/MKL。课程:台大李琳山/哥大 EECS E6870/爱丁堡 ASR。数据:OpenSLR(CN-Celeb 1000位华人30万条;VoxCeleb;TIMIT;LibriSpeech;维基百科语音)。
  • 120 (14-6 总结): 声纹辨识(生物识别,登录/犯罪侦测/智能家居)/声纹建模(模拟特定人唱歌,如 Siri)/相似性比较(语音搜寻)/音乐(曲风/模拟歌手/编曲混音)。文字/影像/语音=AI 三大基石;第三波浪潮不后继无力的部分原因=这些基本技术;像盖房子的地基
  • 121 (篇5扉页): 数十年历史不受瞩目→2016 AlphaGo 击败李世乭、柯洁 一炮而红。
  • 122 (ch15): 强化学习=互动中试误法(Trial and Error)自学找最佳策略;训练狗接飞盘比喻(不教狗,抛飞盘,接到给食物奖励,反复练习);非单一阶段,多阶段反复,似梯度下降。学术:博弈论/自动控制/作业研究/信息论/仿真优化/群体智慧/统计/遗传算法。应用:下棋游戏/机器人控制/广告投放/金融交易/运输路线/库存管理生产排程;「残酷的战争……模拟环境下尝试与错误+行动决策辅助」。
  • 123 (15-1 MDP): 代理人行动→环境更新状态+给奖励→代理人观察状态+奖惩→决定下次行动。术语:Agent(玩家/棋手/机器人/投资者/狗;多个=Multi-Agent)/Environment(奖励或惩罚统称奖励;决定状态)/状态(棋局/位置能力金额;21点庄家盖牌看不到→状态也被称为观察 Observation)/行动。轨迹 {S0,A0,R1,S1,A1,R2,S2...}。MDP 目标=累计奖励最大化=报酬 Return;非每步最大奖励:下棋诱敌牺牲棋子求最后胜利;类似优化:目标函数=报酬,找策略 Policy;对比 NN 最小化损失求权重。MDP=MRP+行动转移矩阵。马尔可夫链:天气晴/雨,今天晴明天晴0.8/雨0.2;今天雨明天晴0.1/雨0.9(状态转换矩阵);马尔可夫性质:目前状态只受前一个状态影响,与更早无关(可扩展n个,似时间序列)。后天概率:晴→晴 0.8×0.8+0.2×0.1=0.66;雨→晴 0.1×0.8+0.9×0.1=0.17。MRP=MP+Reward:学生作息(Chat/Coffee/Computer/Home);V(chat)=-1×0.5+2×0.3+1×0.2=0.3;V(coffee)=2×0.7+1×0.1+3×0.2=2.1;V(home)=1×0.6+1×0.4=1.0;V(computer)=5×0.5+(-3)×0.1+1×0.2+2×0.2=2.8。行动转移矩阵:迷宫四方向概率不等/剪刀石头布参考上次出拳;策略固定常数则 MDP=MRP。
  • 124 (15-2 模型): 状态转移概率 p(S_{t+1}|S_t,A_t)(马尔可夫简化);报酬=走迷宫每步-1,由终点倒推;折扣报酬:乘折扣因子 γ<1,越久远越不重要,似复利;G_t=R_{t+1}+γR_{t+2}+γ²R_{t+3}+…→G_t=R_{t+1}+γG_{t+1}。状态值函数=每条路径报酬的期望值;迷宫例:三种走法报酬 0.72/0.72/-1.16→期望值 0.28/3≈0.09(另一迷宫:起点(1,1),终点(4,3)得1或(4,2)得-1,每步-0.04)。V^π(s)=E(G_t|S_t=s)。Bellman 方程:从下一状态值函数推算目前(π(a|s) 采取策略时在 s 采取 a 的概率;转移概率;[]内由 G=R+γG 转换);trial and error:第50回合值函数可由1~49回合推算。行动值函数 Q。倒推图 Backup Diagram 表示 V 与 Q 关系。
  • 125 (15-3 简单架构): OOP 两类别:Environment(init 状态空间/奖励/行动空间/转换;reset;step 驱动轨迹下一步更新状态给奖励判断结束;render)/Agent(依策略与状态行动;订制策略用继承)。范例:5位置迷宫,站中间,每步扣0.2,左端-1右端+1即结束;随机策略累计报酬-1.2(每次不同=试误证明);10回合;以状态值函数最大者为行动依据:update_state_value 由终点倒推;比较左右相邻节点值函数最大者行动,一样大随机;训练两次后每次都往右走=找到最佳策略;NODE_COUNT=11 同样;模型=每个状态的值函数表,上线直接加载
  • 126 (15-4 Gym): OpenAI;数十种游戏;gcc 写的 Windows 部分装不了;pip install gym;源码安装 pip install -e .;全部游戏仅 Linux;Atari(1967年游戏机:打砖块 Breakout/桌球 Pong)。四类:Classic Control+Toy Text(小型)/Algorithmic(多位数加法反转顺序,计算机简单但 RL 求解挑战)/Atari/2D3D 机器人(部分付费30天)。方法:reset/step(observation/reward/done/info)/render/close。范例刻意模仿 Gym 架构。CartPole 行动空间2离散(0左1右);状态空间 Box 连续4维:小车位置/小车速度/木棒角度/木棒顶端速度+最大最小值。规则:每步1分;杆偏差超12°败;离中心2.4单位胜;200步(v0)/500步(v1)胜;连续100回合平均报酬超195步=解题成功。随机行动:没有一回合超200步,惨烈,很有挑战性。传统对策(距中心>2.4输→一左一右;杆偏右8°→往右直到<8°):报酬增加但大多失败;不通用+无自学能力。状态值函数法难题:①4个变量②连续型须离散化(分组);先不实验,后续更好算法。
  • 127 (15-5 Gym扩充): Wrapper:ObservationWrapper(改 step 返回状态)/RewardWrapper(改奖励)/ActionWrapper(改行动)。ActionWrapper:固定往左,1/10 概率随机(epsilon);wrappers.Monitor 录像存 mp4。
  • 128 (15-6 动态规划): 策略/状态转移概率均已知(环境明确 Deterministic)→Bellman 反复求解=DP。DP=大问题切小问题:斐波那契 F_n=F_{n-1}+F_{n-2} 递归;小问题结果存储作下个基础。RL 两步骤:策略评估(走完一回合更新所有状态值函数;=预测 prediction)/策略改善(依最新状态采最佳策略;=控制 control;贪婪 Greedy 策略有缺陷,后面讨论)。循环=策略迭代 Policy Iteration(图:行动策略π→Vπ→改善→再评估循环至收敛)。Grid World 迷宫(Denny Britz,解 Sutton & Barto「Reinforcement Learning: An Introduction」习题):左上起点右下终点;discount_factor 预设1无折扣;theta 差异容忍值(前后最大差异小于它就停);P 均=1 转移概率均等;随机策略上下左右均等;与书答案对照。策略循环:one_step_lookahead 计算每种行动值函数→最佳行动更新π→无更佳则返回。
  • 129 (15-7 值循环): 策略循环每次改善前先做一次完整评估,费时→值循环 Value Iteration=直接以行动值函数取代状态值函数,评估+改善合一;结果与策略循环相同。DP 优缺点:①适合定义明确(概率已知);②适合中小型模型,状态空间不超百万;围棋状态空间=3^361≈1.74×10^172(原文写作19×19 172 上标),值函数更新执行太久;大部分路径从未走过→样本代表性不足→维数灾难 Curse of Dimensionality
  • 130 (15-8 蒙特卡洛): 实际问题通常不知道转移概率=无模型(Model Free)→DP 派不上用场;MC 用仿真估计转移概率。命名由来:二战核武团队,乌拉姆叔叔在摩纳哥蒙特卡洛赌场输钱。求圆周率:圆面积 πr²,正方形 (2r)²=4r²;随机一千万个点;π=4×圆内点数/总点数;结果 3.1418028 vs 3.14159(更多点更近)。21点扑克牌(Blackjack):策略「≥20点才不补牌」不合理(通常16点就不补),故意用不合理策略测各算法能否提升胜率;状态=(玩家点数031,庄家亮牌111(A),是否有A),维度(32,11,2);行动 0不补1补;一回合同状态可能经历两次(A 先算11后算1,16点两次)→首次访问 First Visit vs 每次访问 Every Visit;1000回合;10000 vs 500000 回合:分数高胜率明显升;有A但分数不高胜率也明显升探索与利用 Exploration and Exploitation:贪婪弱点=发现最大值路径一直走,失去更好机会;比喻:家庭聚餐每次都去之前最好吃的餐厅,新开的永远没机会被发现;ε-greedy=保留比例探索(ε=0.1 则10次有1次随机)。值循环+ε-greedy:低分时也有不差表现,胜率明显提升。On-policy(评估与改良同一策略)vs Off-policy(评估随机策略尽可能走所有路径,改良贪婪尽量求胜);重要性加权抽样(Weighted Importance Sampling;值函数大小作抽样比例分母);低分胜率也明显提升。
  • 131 (15-9 时序差分): MC 缺点:①必须走到终点才能倒推值函数;②状态空间大时太慢(围棋平均150手/盘,3^361 状态,探索也测不完)。TD=边走边算;值函数更新=加上下一状态与目前状态的差额×学习率 α(以目前行动结果代替 Bellman 期望值);走一步更新=TD(0),n步=TD(λ)。倒推图:DP 逐步搜所有下一状态算期望;MC 试走多回合回推;TD 每步更新。两算法:SARSA=On Policy(名字=轨迹五元素 s,a,r,s',a' 缩写);Q-learning=Off Policy(评估 ε-greedy,改良 greedy)。Windy Gridworld:10×7 格,第4/5/6/9列风力1级,7/8列2级,把玩家往上吹1格和2格;一律往右走试玩(30→31 移动奖励-1;被吹上去 (24,-1.0) (15,-1.0));SARSA 200回合:约第50回合收敛,每回合步数几乎相同;报酬越来越高;累计步数曲线上升=每回合步数越来越少。Cliff Walking:最下一排除起点终点外都是陷阱C,踩到-100终止;Q-learning 500回合;程序起点显示异常(第3行第0列却在第3行第6列)但不影响测试;约50回合收敛;报酬升高未收敛;两范例游戏不同不能比较 SARSA 与 Q-learning 效果,要比较须同一游戏策略循环/值循环与神经网络优化求解逻辑相似(图15.38 对照)。
  • 132 (15-10 其他): 表格型 Tabular(数组记录所有对应值,简单直接,只适合离散状态;CartPole 连续变量不适用):变通①连续变量分组离散化②用概率分布或神经网络取代表格,以训练数据估参数——Deep Q-learning(DQN)=用神经网络的 Q-learning。多玩家 MARL:协同合作/对抗,观察其他玩家状态(扑克牌)。表15.1 算法比较;进阶读 Sutton & Barto。
  • 133 (15-11 井字游戏): 转环境/定义状态/立即奖励/模型存盘。给分:胜负未分计算机+0.1玩家+0.5(希望计算机尽快赢);胜负已定1分。连成一列/行/对角线胜。训练50000回合→状态值函数表,计算机玩家分别存盘 policy_p1(先手)/policy_p2(后手);比赛时玩家自行输入;计算机依最大值函数行动,赛前载入;参数2=玩家先手;笔者试几回合,计算机获胜概率较大
  • 134 (15-12 Actor Critic): CartPole 连续变量→Actor Critic。类似 GAN:两个网络,行动者在评论者指导下优化行动决策,评论者评估好坏并主导值函数模型参数更新(Keras 官网范例 rl/actor_critic_cartpole)。报酬超195分即停=模型成熟;763回合成功达成目标;官网两段动画:训练初期摇摇晃晃,后期行驶相当稳定。
  • 135 (15-13 总结): 自动驾驶/无人搬运车 AGV(摄像机侦测障碍+强化学习决策;办公室/工厂/医院平面图制成迷宫路径仿真训练→模型移植机器人从A送货到B);股票投资/脑部手术;好处:不用搜集大量训练数据,也不需标记数据(理论较深奥,需程序基础)。