AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

118
技术文章
8
文章分类
537
技术标签
29971
累计字数
结合代码,看懂PyTorch的自动微分(Autograd)
人工智能
2023-12-16 • 0k

结合代码,看懂PyTorch的自动微分(Autograd)

在深度学习中,PyTorch 的自动微分(Autograd)机制极大地简化了模型训练过程。在实际的训练代码中,自动微分并不是一个孤立的函数,而是通过一套标准的训练闭环来体现的。结合一段典型的 PyTorch 模型训练代码,自动微分主要体现在以下三个核心步骤: 有的说法是叫“自动梯度”更合理 1. 开启梯度追踪(构建计算图) pred_y = model(x) loss_value = loss(pred_y, y) 在 PyTorch 中,模型的参数(如权重 w 和偏置 b)在初始化时默认带有 requires_grad=True 属性。当代码执行前向传播 model(x) 以及计算损失 loss(pred_y, y) 时,PyTorch 的 Autograd 引擎会在后台默默记录所有的运算过程,并动态构建出一张“计算图”。 2. 触发反向传播(自动计算梯度) loss_value.sum().backward() 这是自动微分最直接的体现。调用 .backward() 后,Autograd 引擎会从损失值(标量)出发,沿着之前构建的计算图逆向遍历,利用链式法则自动计算出每一个参与运算的参数的梯度。开发者完全不需要手动编写任何求导公式。 3. 梯度清零(防止梯度累加) optimzer.zero_grad() PyTorch 的自动微分机制默认会累加梯度,而不是覆盖梯度。如果不手动清零,之前批次计算出的梯度会一直叠加,导致模型参数更新混乱。因此,在每次反向传播之前,必须通过优化器将之前自动计算并累积的梯度清空。 总结 这段训练代码完美遵循了 PyTorch 自动微分的标准范式:前向传播记录计算图 -> 梯度清零 -> 反向传播自动求导 -> 优化器更新参数。理解这一过程,是掌握 PyTorch 模型训练的核心。

PyTorch 自动微分 Autograd
阅读更多
四维张量计算原理
人工智能
2023-10-22 • 0k

四维张量计算原理

四维张量 sum(dim) 计算原理 示例张量 t4,shape = (2, 2, 2, 3) → 2个组 × 2个块 × 2行 × 3列 📦 原始张量结构 第 0 组 (dim=0 索引0) 第 0 块 (dim=1 索引0) 123 412 第 1 块 (dim=1 索引1) 210 132 第 1 组 (dim=0 索引1) 第 0 块 (dim=1 索引0) 321 024 第 1 块 (dim=1 索引1) 142 213 dim=0:组维度  |  dim=1:块维度  |  dim=2:行维度  |  dim=3:列维度 1. sum(dim=0):沿「组维度」求和 同一个块、同行、同列,对不同组相加 第0组 第0块 123 412 + 第1组 第0块 321 024 = 结果里的第0块 444 436 结果第 0 块 444 436 结果第 1 块 352 345 1 + 3 = 4      不同组里「同位置」的元素对应相加 ✅ 结果 shape:(2, 2, 3)(消除 dim=0,剩下块、行、列) 2. sum(dim=1):沿「块维度」求和 每个组内部,把第0块和第1块按位置相加 第0组 第0块 123 412 + 第0组 第1块 210 132 = 第0组结果 333 544 第 0 组结果 333 544 第 1 组结果 463 237 1 + 2 = 3      同一组内,不同块的同位置元素相加 ✅ 结果 shape:(2, 2, 3)(消除 dim=1,剩下组、行、列) 3. sum(dim=2):沿「行维度」求和 每个组、每个块内部,把上下两行按列相加 第0组 第0块 123 412 ↓ 压成 1 行 3 列 535 第 0 组结果 块 0 535 块 1 342 第 1 组结果 块 0 345 块 1 355 1 + 4 = 5      同一列里,上下两行纵向相加 ✅ 结果 shape:(2, 2, 3)(消除 dim=2,剩下组、块、列) 4. sum(dim=3) / sum(dim=-1):沿「列维度」求和 每一行内部,把 3 列横向相加;`dim=-1` 就是最后一维 第0组 第0块 123 412 → 压成 2 行 1 列 6 7 第 0 组结果 块 0 6 7 块 1 3 6 第 1 组结果 块 0 6 6 块 1 7 6 1 + 2 + 3 = 6      每一行把所有列直接加起来 ✅ 结果 shape:(2, 2, 2)(消除 dim=3,剩下组、块、行) 💡 核心规律总结 1. dim 指哪一维,就沿哪一维求和,求和后这一维会被消掉,其他维度顺序不变 2. 四维张量可以先想成:组里面套块,块里面还是二维矩阵,这样看 `dim` 最直观 3. 负索引从后往前数:dim=-1 = dim=3,dim=-2 = dim=2 4. 对于 shape=(2,2,2,3): sum(dim=0) → shape=(2,2,3) sum(dim=1) → shape=(2,2,3) sum(dim=2) → shape=(2,2,3) sum(dim=3) / sum(dim=-1) → shape=(2,2,2) sum() 不指定 dim → 所有元素一起相加,结果是一个标量

张量 PyTorch 深度学习
阅读更多
一文讲透激活函数:为什么它能搞定非线性问题?
人工智能
2023-08-28 • 0k

一文讲透激活函数:为什么它能搞定非线性问题?

很多人入门神经网络,都会卡在“激活函数”这一步。 你可能听过无数遍这句话:加入激活函数,神经网络就能处理非线性问题。但心里大概率藏着一堆问号: 什么是线性?什么是非线性?为什么一条直线就能表示线性问题? 激活函数到底做了什么,凭什么它就能处理非线性? ReLU把负数都归零了,数据不会失真吗?信息不会丢吗? 识别图片这么复杂的事,和“曲线”到底有什么关系? 这篇文章我们完全抛开公式,用生活里的例子,把这些问题一次性讲透,数学小白、计算机小白也能看懂。 一、先搞懂基础:什么是线性?什么是非线性? 先别急着看神经网络,我们从最日常的事说起。 1. 线性问题:“成正比”的简单关系 想象你去买苹果,一斤5块钱。 买1斤,花5元 买2斤,花10元 买10斤,花50元 买的重量翻倍,花的钱也跟着翻倍。这种输入变多少,输出就按固定比例跟着变的关系,就叫线性关系。 把它画在坐标图上,就是一条直直的线,“线性”这个名字就是这么来的。 生活里纯线性的事还有很多:按小时算的时薪、匀速行驶的路程和时间……它们的规律都很简单:没有拐弯、没有阈值,永远按固定比例走。 2. 非线性问题:真实世界的本来面貌 但真实世界里,绝大多数事情都不是“成正比”这么简单。 举几个最常见的例子: 体温与健康:37度是正常,38度算发烧,42度就会有生命危险。不是温度越高“病得越重”,到了某个临界点,性质就完全变了。 按开关开灯:按到一半灯还是灭的,一旦过了某个临界点,灯突然全亮。中间有一个明确的“阈值”。 房价与面积:不是面积大一倍价格就大一倍,地段、学区、楼层、装修都会影响价格,各种因素交织,关系弯弯曲曲。 识别一张猫的照片:像素亮度变一点点,它还是猫;但变多了可能就变成狗了,绝不是简单的比例关系。 这些不成正比、有拐弯、有阈值、关系复杂的问题,就叫非线性问题。画在图上,它们是曲线、折线、奇形怪状的面,一条直线根本描述不了。 二、没有激活函数的神经网络:永远只会画直线 搞懂了线性和非线性,我们再来看神经网络本身。 神经网络最基本的单元叫“神经元”,它做的事特别简单:接收一堆输入,给每个输入分配一个“重要程度”(权重),全部加起来,再加上一个偏移量,然后输出结果。 说白了就是:把各个数按比例加起来。 比如判断一个水果是不是苹果,神经元可能会算: 颜色红不红 × 0.6 + 圆不圆 × 0.3 + 大小 × 0.1 = 总分 这本质上还是一个线性计算——输入怎么变,输出都按固定比例跟着变。 叠很多层,总该变复杂了吧? 有人会说:一层是直线,我叠一百层、一千层,总该能处理复杂问题了吧? 很遗憾,不行。 你可以这么理解:第一层把输入“按比例加一遍”得到结果,第二层再把这个结果“按比例加一遍”……不管你加多少层,本质上都是“按比例加来加去”,最后数学上化简一下,仍然等价于一层线性计算。 举个最简单的例子: 第一层:y = 2x + 1 第二层:z = 3y + 2 合起来化简:z = 3(2x+1) + 2 = 6x + 5 最后还是一条直线。

激活函数 神经网络 ReLU
阅读更多
Windows 11 隐藏技巧清单:这些神级设置,让你的电脑好用到飞起
工具与效率
2023-08-21 • 0k

Windows 11 隐藏技巧清单:这些神级设置,让你的电脑好用到飞起

除了之前提到的经典技巧,Windows 11还有很多类似这样好用的“隐藏彩蛋”。我把它们整理成了一份清单,希望能帮你解决问题: 🚀 效率小细节 告别繁琐批处理:一键批量重命名:在文件资源管理器里,一次性选中所有需要改名的文件,然后右键并选择“重命名”,输入一个统一的名称并按回车。比如输入“项目报告”,它们就会被自动命名为“项目报告 (1)”、“项目报告 (2)”……从此告别一个个手动修改。 秒回桌面,优雅摸鱼:Win + D 是个好用的快捷键,按一次瞬间显示桌面,再按一次就能恢复之前的所有窗口。比一个个点“最小化”或者鼠标狂甩到“显示桌面”按钮快多了,非常适合在老板突然经过时“一秒切回桌面”。 Ctrl键找鼠标:在“设置” → “蓝牙和其他设备” → “鼠标” → “其他鼠标设置” → “指针选项”里,勾选“当按 CTRL 键时显示指针的位置”。之后找不到鼠标指针时,按一下Ctrl键,一个会动的圆形光圈就会立刻指示出它的位置,对高分辨率屏幕或者眼神不太好的用户非常友好。 Ctrl键找鼠标:高分辨率屏幕或密集代码中经常找不到鼠标?在“设置” > “蓝牙和其他设备” > “鼠标” > “其他鼠标设置” > “指针选项”中,勾选“当按 CTRL 键时显示指针的位置”。找不到它时按一下Ctrl键,一个动画光圈会立刻为它定位。 锁屏忘了?手机帮你记:通过“设置” → “蓝牙和其他设备” → “添加蓝牙设备”将手机与电脑配对,然后在“账户” → “登录选项”中,找到“动态锁”,勾选“允许 Windows 在你离开时自动锁定设备”。当你带着手机离开,系统检测不到配对设备的蓝牙信号就会自动锁定电脑,安全又便利。 👓 不再迷路的鼠标指针 Ctrl键找鼠标:高分辨率屏幕或密集代码中经常找不到鼠标?在“设置” > “蓝牙和其他设备” > “鼠标” > “其他鼠标设置” > “指针选项”中,勾选“当按 CTRL 键时显示指针的位置”。找不到它时按一下Ctrl键,一个动画光圈会立刻为它定位。 ⚙️ 系统加速隐藏开关 让搜索“飞”起来:关闭Bing网络搜索:在注册表路径 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search 下,找到或新建一个名为 BingSearchEnabled 的 DWORD (32 位)值,将其数值数据设置为 0。这会让系统只搜索本地内容,避开网络延迟,搜索响应速度能快上不少。 告别“又卡又闪”的资源管理器:通过第三方免费工具 ExplorerPatcher,在其属性设置中,找到“文件资源管理器(File Explorer)”菜单,取消勾选“Windows 11 命令栏(Command Bar)”,并选择使用“Windows 10 Ribbon 菜单”或“Windows 7 命令栏”。这样可以大幅提升文件资源管理器的稳定性和响应速度。 禁用“自动发现”提速文件夹:在注册表路径 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell 下,新建一个名为 FolderType 的字符串值,并将其数值数据设置为 NotSpecified。这可以防止系统反复扫描文件夹内容以“自动优化”视图,打开文件较多的文件夹时会流畅很多。 ✨ 解放双手的智能功能 不想打字?直接说吧!:在任何可以输入文字的地方,按下 Win + H 快捷键,就能直接唤醒 Windows 的语音录入功能。对着麦克风说话,系统会自动识别并转换成文字,还支持基础的标点符号识别,非常适合懒得打字或者需要快速记录的场景。 续上你的工作:重启自动恢复应用:在“设置” → “账户” → “登录选项”中,开启“自动保存我的可重启应用,并在我重新登录时将它们重启”。下次电脑重启或更新后,那些未关闭的文件夹和应用会像什么都没发生过一样,自动重新打开,让你的工作无缝衔接。 一次性拥有所有设置:上帝模式:在桌面上新建一个文件夹,然后将文件夹重命名为:上帝模式.{ED7BA470-8E54-465E-825C-99712043E01C}。文件夹图标会变成控制面板的样子,打开它就像拥有了一个包含Windows中几乎所有管理和配置工具的“宝藏库”,按需搜索即可直达深层设置。 ⌨️ 提高效率的专属快捷键 Win + V:剪贴板历史(需首次手动开启),它能记住你最近复制过的所有内容,并支持在设备间同步。 Win + Tab:新建多个“虚拟桌面”,用Win + Ctrl + 左右箭头快速切换,把工作、学习、娱乐分开放置。 Win + Shift + S:唤出全新的截图工具,提供了矩形、任意形状等多种截图模式,截图后还能直接编辑或录制屏幕。 Ctrl + Shift + T:在浏览器里误关了一个标签页?直接按这个组合键就能瞬间重新打开,而且会保留浏览历史。 F2:在文件资源管理器里,选中文件或文件夹后直接按 F2,就可以快速进入重命名状态。 🤫 冷门但实用的小功能 专注时段:一个内置的番茄钟工具,可以定时静音通知,让你能专注工作。 隐藏桌面图标:在桌面右键,选择“查看”,然后取消勾选“显示桌面图标”,可以一键隐藏所有图标。 Ctrl + 鼠标滚轮:在“此电脑”或任意文件夹内,按着Ctrl滚动滚轮,可以快速切换文件和文件夹的图标大小。

Windows Windows 11 技巧
阅读更多
AI真的懂你的话吗?一文看透大模型的“概率魔法”与“维度陷阱”
人工智能
2023-07-03 • 0k

AI真的懂你的话吗?一文看透大模型的“概率魔法”与“维度陷阱”

今天,我们就来扒一扒人工智能与人类认知的底层逻辑,揭开 AI 运转的四大核心真相。 一、 机器学习的本质:真的只是“算概率”吗? 很多人认为“机器学习 = 概率推测”。这个说法抓住了主流,但不够全面。 “概率推测”确实是最核心的思维方式。 比如判断一封邮件是不是垃圾邮件(分类),或者大模型预测下一个词是什么(生成),本质上都在计算概率。从统计学派的角度看,很多机器学习问题就是概率推断。 但是,机器学习的武器库远不止概率,它还包括其他核心机制: 算具体数值(回归):预测明天气温25度、房价300万。模型直接输出确定的连续数值,而不是推测概率。 算距离与几何(聚类、SVM):把相似的用户分群(K-Means),核心是计算数据点之间的“空间距离”;支持向量机(SVM)是寻找“最宽的几何间隔”来切分数据。这依赖的是几何和线性代数。 算奖励与试错(强化学习):AI 下围棋、机器人学走路,核心是通过不断“试错”来最大化累积奖励,学习的是行动策略。 小结:机器学习的核心是 “从数据中学习规律,从而对未知事物进行预测或决策”。“概率”只是它最常用的一种数学工具,而非全部。 二、 人脑 vs AI:我们的大脑也是一台“概率推测机”吗? 既然 AI 在算概率,那人类呢?现代认知科学和神经科学的主流观点给出了肯定的答案:人的大脑本质上就是一台“概率推测机”。 大脑是如何做概率推测的? 贝叶斯大脑假说:大脑时刻在做贝叶斯推断。它结合“先验概率”(过去的经验)和“当前证据”(感官输入),推测出最可能的结果。大脑不是被动接收信息,而是主动预测世界。 预测编码(自由能原理):神经科学家 Karl Friston 认为,大脑的核心任务是最小化“意外”。大脑时刻生成预测,如果现实和预测不符(比如你以为台阶还有一级,结果踩空了),大脑就会产生“预测误差”,并立刻更新概率模型。 神经层面的“概率投票”:单个神经元的放电充满随机性。大脑做决定时,是成千上万个神经元在“投票”,当支持某个决定的概率累积超过阈值时,大脑才会做出行动。 但是,人脑和 AI 有本质区别 虽然都是概率推测,但两者的表现截然不同: 计算精度:AI 是精确计算(算出下一个词是“苹果”的概率为 87.3%);人脑是模糊估算(靠“直觉”,容易产生认知偏差)。 数据需求:AI 需要海量数据(看几百亿个词);人脑擅长小样本学习(小孩看一次狗,就能认出所有的狗)。 核心目标:AI 为了优化目标函数(降低误差);人脑为了生存与繁衍(草丛里有动静,宁可错认为老虎,也不能漏判)。 三、 机器的“语义魔法”:它怎么懂文字的意思? 很多人以为,机器把文字转成向量,就像是给字典里的字编号(比如“苹果”是1024号,“梨”是1025号)。如果真是这样,机器确实不懂语义,因为编号之间没有数学关系。 真相是:现代 AI 用的向量不是“编号”,而是“多维空间里的坐标”。 1. 机器怎么“知道”语义?(靠统计学的“物以类聚”) 语言学有个核心假设:“一个词的含义,由它周围的词决定。” 机器在阅读了千亿篇文章后发现:“吃 ” 后面常接“苹果”、“香蕉”;“ 手机” 前面常接“苹果”、“华为”。 机器通过神经网络,把这种 “共同出现的概率” 变成了 “空间里的距离”。在机器的多维空间里,“国王”减去“男人”加上“女人”的坐标,刚好等于“女王”!机器不懂什么是国王,但它用几何距离完美表达了人类的语义关系。 2. 机器怎么“压缩”语义?(靠注意力机制“互相染色”) 当你输入“我想吃苹果”时,编码器(Encoder)通过注意力机制(Attention) 让这5个词互相“交流”: “苹果”的向量会吸收“吃”和“想”的信息。 经过多层神经网络,原本只代表“水果”的“苹果”向量,被修改成了一个包含“想吃”意图的新向量。 所谓“压缩语义”,就是通过矩阵乘法,把一长串词的高维信息,提炼、融合成最能代表这句话核心特征的“上下文向量”。 机器没有人类的“具身认知”(没吃过苹果),但它掌握了语言的“分布式拓扑结构”。 四、 维度的秘密:AI 的“脑容量”越大越好吗? 既然向量是空间坐标,那把文字压缩成几维的向量?是维度越高越好吗?

机器学习 概率 贝叶斯
阅读更多
个人建站免费 HTTPS 证书全攻略:三种方案轻松搞定
运维与DevOps
2023-06-30 • 0k

个人建站免费 HTTPS 证书全攻略:三种方案轻松搞定

不花一分钱,也能给自己的网站加上“小绿锁” 建站初期,很多个人站长都会纠结一个问题:要不要上 HTTPS? 买证书要花钱,免费的又怕不靠谱。其实,今天已经有很多成熟的免费方案,完全可以满足个人博客、小型项目的需求。本文就来聊聊我个人用过的几种方案,并给出最实在的建议。 为什么要折腾 HTTPS? 简单说两点: 浏览器不“警告”:没有 HTTPS,Chrome 会在地址栏标记“不安全”,非常劝退访客。 SEO 友好:搜索引擎更青睐 HTTPS 站点。 既然好处明显,付费证书动辄几百上千,个人站长完全可以从免费方案入手。 方案一:云厂商“白送”的证书——最适合新手 如果你用的是阿里云、腾讯云、华为云等国内云服务器,它们都提供了免费 DV 证书。以阿里云为例: 登录控制台 → 找到“数字证书管理服务”(SSL 证书)。 点击“购买证书”,筛选“免费版”(DigiCert 品牌,单域名,有效期 1 年,实际 3 个月,但可续期)。 填写域名,选择 DNS 验证(在域名解析加一条 TXT 记录)或文件验证。 审核通过后下载证书,按你的 Web 服务器(Nginx/Apache)配置即可。 ✅ 优点:操作全程中文,跟自己的云产品无缝对接,有客服。 ❌ 缺点:每个实名主体每自然年只有 20 张(其实够用),有效期只有 90 天,且仅支持主域名或 www 的一个单域名。 小技巧:虽然只有 90 天,但云厂商一般会提前提醒续期,手动重签一次也很简单。 方案二:Let‘s Encrypt + acme.sh —— 技术玩家的最爱 如果你不满足于单域名,或者希望完全自动化(比如申请泛域名证书 *.example.com),那 Let’s Encrypt 就是不二之选。它是 Linux 基金会旗下的公益 CA,全球信任。 配合 acme.sh 这个纯 Shell 脚本,可以实现: 90 天有效期,到期自动续期(通过 crontab)。 支持 DNS API 自动验证(针对阿里云、腾讯云、Cloudflare 等上百家 DNS 服务商)。 通配符证书(需要 DNS 验证)。 基本操作(以 Nginx 为例):

HTTPS SSL证书 Let's Encrypt
阅读更多
Win11 文件资源管理器默认打开「此电脑」:告别快速访问,一步直达
工具与效率
2023-05-12 • 0k

Win11 文件资源管理器默认打开「此电脑」:告别快速访问,一步直达

每次打开文件资源管理器,Windows 11 都默认跳转到“快速访问”页面,里面堆满了最近使用的文件和文件夹。但对于很多用户来说,他们更希望直接看到完整的硬盘分区和系统文件夹——“此电脑”。其实只需一个简单设置,就能改变这个默认行为。 一、通过文件夹选项设置(官方原生方式,推荐) 这是最简单、最安全的方法,完全不需要接触注册表,设置后立即生效。 操作步骤: 随意打开一个文件夹窗口(或按 Win + E 快捷键)。 点击窗口顶部工具栏右侧的 “···”(三个点)按钮,在下拉菜单中选择 “选项”。 (也可以直接在地址栏旁边找到“查看”菜单下的“选项”,或者点击“···”后选择“选项”) 在弹出的“文件夹选项”窗口中,确保当前是 “常规” 选项卡。 在顶部“打开文件资源管理器时打开”的下拉菜单中,将默认选项从“快速访问”改为 “此电脑”。 点击 “确定” 保存设置。 从此以后,你再按下 Win + E 打开文件资源管理器时,就会直接显示“此电脑”界面,可以看到 C盘、D盘、下载文件夹等所有系统位置。 恢复方法: 如果想换回快速访问,只需按照上述步骤,在下拉菜单中选择“快速访问”即可。 二、通过组策略编辑器修改(仅限专业版/企业版) 如果你使用的是 Windows 11 专业版、企业版或教育版,还可以通过组策略来统一设置,尤其适合企业环境下的批量管理。 按下 Win + R,输入 gpedit.msc 并回车,打开“本地组策略编辑器”。 依次展开:用户配置 → 管理模板 → Windows 组件 → 文件资源管理器。 在右侧列表中找到 “打开文件资源管理器时打开‘此电脑’” 策略。 双击该策略,选择 “已启用”,然后点击“确定”。 重启文件资源管理器或注销重新登录即可生效。 三、注册表修改法(适用于所有版本,进阶用户) 如果你的系统是 Windows 11 家庭版(没有组策略编辑器),或者你更喜欢直接用注册表,可以这样做。 操作步骤: 按下 Win + R,输入 regedit,回车打开注册表编辑器。 导航到以下路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 在右侧窗口中找到名为 LaunchTo 的 DWORD 值。 如果不存在,请在空白处右键 → 新建 → DWORD (32 位)值,命名为 LaunchTo。 修改其数值数据: 1 表示打开“此电脑” 0 表示打开“快速访问” 点击“确定”,然后重启文件资源管理器(可在任务管理器中找到“Windows 资源管理器”右键重启)或注销再登录。 💡 小贴士:两种模式随时切换 即便你设置了默认打开“此电脑”,也仍然可以在文件资源管理器的左侧导航栏中,随时点击“快速访问”来查看最近使用的文件。两者互不矛盾,只是改变默认落地页而已。

Windows Windows 11 资源管理器
阅读更多
从开发视角彻底读懂机器学习核心数学概念
人工智能
2023-05-08 • 0k

从开发视角彻底读懂机器学习核心数学概念

很多工程师一看到 导数、偏导、反向传播、自动微分、梯度下降、权重、偏置 这些词,就容易觉得机器学习门槛很高。 其实这些概念放到代码里并不神秘。本文会用一个 广告系统智能出价引擎 的例子,尽量不用复杂公式,把这组核心概念讲清楚。 一、 业务场景引入:智能广告出价引擎 为电商网站开发广告投放系统:根据用户历史活跃度(过去30天点击次数 $x$),自动算出合理的广告竞价(预测出价 $y_{pred}$)。出价太高成本爆炸,太低抢不到曝光,因此要让系统自动“学会”配置最优的出价核心参数。 二、 流程里的核心角色 可以先记住这几个最核心的角色。 权重 w:决定某个特征有多重要。 偏置 b:决定基础输出是多少。 它们一起组成最简单的模型: $ y = w \cdot x + b $ w 和 b 一开始通常是随便给的,训练的过程,就是不断把这两个值调得更合适。 把输入数据送进模型,算出预测值,这一步就叫前向传播。 比如 x = 3,w = 2,b = 1,那么: $ y_{pred} = 2 \times 3 + 1 = 7 $ 但预测值 7 和真实值 10 还有差距,所以还要用损失函数来衡量“错了多少”。 比如用平方误差: $ Loss = (y_{pred} - y_{true})^2 = (7 - 10)^2 = 9 $ 这里这个公式叫损失函数,算出来的 9 就是损失值。训练的目标,就是让损失越来越小。

机器学习 数学基础 梯度下降
阅读更多
Win11 任务栏图标靠左设置:告别居中,找回经典布局
工具与效率
2023-03-21 • 0k

Win11 任务栏图标靠左设置:告别居中,找回经典布局

Windows 11默认将任务栏图标居中显示,这一设计虽然现代,但很多从Win10升级过来的用户更习惯传统的左对齐布局。其实系统自带了左对齐选项,只需几步就能轻松调整,完全是微软官方的原生功能,安全可靠。 一、通过系统设置调整(官方原生方式,强烈推荐) 这是最简单、最安全的方法,完全不需要接触注册表,所有更改立即生效。 操作步骤: 在任务栏的空白处右键点击,在弹出的菜单中选择“任务栏设置”。 在打开的设置页面中,向下滚动,找到并点击“任务栏行为”以展开详细选项。 在“任务栏对齐方式”下拉菜单中,将选项从默认的“居中”改为“左”。 设置完成后,任务栏图标会立即移动到左侧,无需重启电脑。 原理说明: 这一步操作实际上是在修改 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 路径下的 TaskbarAl 注册表值,DWORD值为 0(左)或 1(居中)。系统设置界面只是为这个底层配置提供了一个友好的图形入口。 恢复方法: 如需恢复居中对齐,只需按照上述步骤,在“任务栏对齐方式”下拉菜单中选择“居中”即可。 适用版本: Windows 11 22H2及后续版本(包含23H2、24H2)。 二、其他进阶方法 如果你的系统版本较旧,或者设置选项被禁用,也可以使用以下方法。 🖥️ 方法二:通过命令行(.bat脚本) 一行命令搞定,适合需要批量部署的场景。 打开记事本,输入以下内容: reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v TaskbarAl /t REG_DWORD /d 0 /f 保存文件时,将后缀名改为 .bat(例如 Left.bat),右键选择“以管理员身份运行”即可生效。 🛠️ 方法三:使用第三方优化脚本 如果你希望对任务栏进行更多自定义改造(如隐藏搜索框),可以考虑使用 Win11Debloat 这类开源脚本工具。它提供了一键运行的任务栏左对齐注册表脚本(Align_Taskbar_Left.reg),方便进行批量设置。 ❓ 常见问题与注意事项 为什么找不到“任务栏行为”选项? 如果在任务栏设置中找不到“任务栏行为”或“任务栏对齐方式”选项,可能是因为你的Windows 11版本过旧,最初的预览版没有这个功能,可以更新系统到最新版本再尝试。 设置后没有生效怎么办? 可以尝试以下步骤排查: 按 Ctrl + Shift + Esc 打开任务管理器。 在“进程”列表中找到“Windows 资源管理器”。 右键点击它,选择“重新启动”,等待屏幕刷新后再次检查。 系统更新后设置会丢失吗? 某些系统更新可能会覆盖对注册表的修改,如果更新后发现任务栏又变回了居中,重新设置一次即可。 只想临时看看左对齐效果? 如果只是想临时体验一下,又不想做任何修改,不必着急,直接按照上面方法操作就可以了。Win11的左对齐本身就是原生支持的功能,放心开启吧! ⚠️ 重要提示 无论使用哪种方法,都建议先备份重要数据。注册表修改存在一定风险,虽然本文的方法都经过验证,但以防万一,最好在操作前创建系统还原点或备份注册表。

Windows Windows 11 任务栏
阅读更多
过滤器、拦截器与 AOP:Java 开发中的三角关系解析
后端开发
2023-01-28 • 0k

过滤器、拦截器与 AOP:Java 开发中的三角关系解析

在Java开发中,过滤器和拦截器常被提及,它们与AOP(面向切面编程)的关系容易让开发者困惑。本文将深入解析三者之间的关系、核心区别与适用场景,并回答关键问题: “AOP能否替代过滤器和拦截器?” 通过技术拆解与实战案例,带你理清三者协作的正确姿势。 一、核心结论:三角协作,各司其职 过滤器和拦截器是AOP思想的实践工具,用于解决Web层的横切关注点,但仅覆盖请求处理流程的特定阶段。 AOP是更通用的编程范式,可作用于任意Java方法(如Service层逻辑),与HTTP请求无关。 三者执行顺序(从外到内):Filter → Interceptor → AOP,层级递进,协同工作。 二、关键区别:技术层级、能力与边界 维度 过滤器(Filter) 拦截器(Interceptor) AOP 技术层级 Servlet容器(如Tomcat) Spring MVC框架 Spring框架或AspectJ 作用范围 所有HTTP请求(含静态资源) 仅Spring MVC的Controller请求 任意Spring管理的Bean方法 核心能力 操作原始HTTP流(请求/响应) 访问Web上下文(如HttpServletRequest) 方法级增强(如事务、日志) 典型场景 字符编码、跨域处理、安全头注入 登录认证、权限校验、接口日志 事务管理、缓存控制、性能监控 能否访问Spring Bean ❌(需特殊配置) ✅ ✅ 能否拦截静态资源 ✅ ❌ ❌ 三、误区澄清:AOP无法替代过滤器和拦截器 为什么AOP不能完全替代? 技术层级不兼容: 过滤器:处理容器级协议问题(如修改原始请求体、设置字符编码),AOP无法触及HTTP原始流。 拦截器:处理Web层业务规则(如重定向、Session校验),AOP若在Service层实现,会导致逻辑与Web层耦合(例如定时任务触发不必要的权限校验)。 关键功能缺失: 静态资源处理、协议级配置(如CORS)必须由过滤器完成,AOP无法覆盖。 性能与可靠性风险: 用AOP替代过滤器处理高频静态资源,会造成不必要的动态代理开销,降低性能。 在AOP中通过RequestContextHolder获取请求对象,易在异步场景引发线程安全问题。 四、最佳实践:分层协作,各取所长 过滤器(Filter): 职责:处理协议级问题,如跨域、安全头注入、请求解密、字符编码设置。 案例:强制HTTPS重定向、全局IP黑白名单过滤。 拦截器(Interceptor): 职责:处理Web层业务逻辑,如登录校验、权限控制、接口级日志记录。 案例:基于用户角色的API权限校验,防重复提交。 AOP: 职责:处理业务层通用逻辑,与方法调用绑定,如事务管理、缓存、性能监控。 案例:@Transactional注解实现事务控制,方法级日志记录。 五、实战建议与避坑指南 分层设计原则: 协议层问题用过滤器,Web层逻辑用拦截器,业务层通用逻辑用AOP。 避免职责错位: 不要在Service层用AOP实现登录校验(应使用拦截器),避免非Web场景触发错误逻辑。 性能优化: 对静态资源请求,通过过滤器配置(如<url-pattern>)跳过不必要的拦截器或AOP逻辑。 代码示例参考: 过滤器示例:public class CorsFilter implements Filter { ... } 拦截器示例:public class AuthInterceptor implements HandlerInterceptor { ... } AOP示例:@Aspect @Component public class LogAspect { ... } 六、总结:三角关系,协同共赢 过滤器和拦截器是AOP思想在Web请求链路中的落地形式,但各自有不可替代的职责。AOP的通用性不应成为替代其他两者的理由。合理的架构设计应遵循分层协作原则:

Java Spring AOP
阅读更多