如何理解批量归一化?

批量归一化(Batch Normalization, BN) 在理解这一部分的时候,我查阅了很多资料,但对于BN的具体实现以及作用还是不太清楚,前几天当面询问了老师,他给了我一个更容易理解的例子,我觉得很好,从他的例子再去看其他资料的解释,就很容易理解了。 原理 批量归一化的核心是对每一层网络的输入数据,计算出它们的均值和标准差,然后将这些数据进行标准化,使得这些数据的分布更接近标准正态分布(即均值为0,方差为1)。同时,为了不影响模型的学习能力,BN还会引入两个可训练的参数:缩放参数和偏移参数,这样即使数据被归一化了,网络仍然可以通过调整这两个参数来学习不同的特征。 如何理解? 批量归一化(Batch Normalization, BN)可以用一个简单的比喻来理解: 假设你在一个班级里,大家都要参加一次考试,但考试前每个人的学习状态不一样:有的人状态好,有的人状态差。如果直接考试,可能成绩会有很大波动,影响整体表现。 为了让大家在一个相对公平的状态下考试,老师先给大家做了一些准备活动,让每个人的状态都差不多,比如让大家一起做深呼吸、放松心情、统一考试前的精神状态。这样一来,每个人的初始状态更接近,考试的表现就更稳定了。 在深度学习中,批量归一化就类似于这个准备活动。它在每一层网络计算之前,先对数据进行一次“整理”,让数据的状态更一致。具体来说,它会对输入到每一层的批量数据进行归一化处理,调整数据的分布,使得每一层网络在处理这些数据时,能够更稳定、高效。 下面我们举一个例子: 假设你班上有五个学生,他们在考试前的学习状态(可以看作每个学生的“分数分布”)如下: 小明:状态 90 分 小红:状态 70 分 小刚:状态 50 分 小丽:状态 60 分 小强:状态 80 分 这时候,直接让他们去考试,最终成绩可能会因为初始状态的不同而差异很大。为了让大家在一个更公平的状态下考试,老师决定在考试前先做一个“批量归一化”的准备活动。 批量归一化的过程 1. 计算均值: 首先,老师计算一下大家状态的平均值: \[ \text{平均状态} = \frac{90 + 70 + 50 + 60 + 80}{5} = 70 \] 2. 计算标准差: 然后,老师计算一下大家状态的标准差(衡量数据的分散程度): \[ \text{标准差} = \sqrt{\frac{(90-70)^2 + (70-70)^2 + (50-70)^2 + (60-70)^2 + (80-70)^2}{5}} \approx 14.14 \] 3. 状态归一化: 接下来,老师会调整每个人的状态,使得它们的分布更加均匀。具体做法是:每个人的状态减去均值,再除以标准差,让数据的均值变为 0,标准差变为 1。...

八月 11, 2024 · 1 分钟

LeNet 学习笔记

讲几句废话 “当我以为自己掌握了大量知识的时候,才发现自己所知道的只是这个领域中的沧海一粟。”——bdim 学习感悟 最近一直在尝试学习图像识别相关的内容,其中就有 LeNet 这个经典的卷积神经网络,在这里记录一下学习过程。经过重复阅读 《深度学习图解》 这本书之后,终于能够理解 Lenet 的大部分细节。在这里我尝试通过自己的理解,尝试重新实现一个 LeNet,并通过查询资料将一些自己不是太理解的内容也来抽象理解一下,本文内容可能并不准确,并将持续更新细节。欢迎对本文提出质疑并与作者进行交流学习!! LeNet5 is one of the earliest Convolutional Neural Networks (CNNs). It was proposed by Yann LeCun and others in 1998. LeNet 论文链接 : Gradient-Based Learning Applied to Document Recognition. 环境 我使用的设备环境: c.' [email protected] ,xNMM. ----------------------------- .OMMMMo OS: macOS 14.5 23F79 arm64 lMM" Host: MacBookPro18,4 .;loddo:. .olloddol;. Kernel: 23.5.0 cKMMMMMMMMMMNWMMMMMMMMMM0: Uptime: 26 days, 21 hours, 14 mins .KMMMMMMMMMMMMMMMMMMMMMMMWd. Packages: 275 (nix-user) XMMMMMMMMMMMMMMMMMMMMMMMX....

七月 13, 2024 · 5 分钟

记录一次由于 FX3 断电导致视频文件丢失并成功恢复的实践

今天在给甲方录制视频的时候,中间由于假电池断电,导致机器直接关机,而视频文件没有保存下来。当时我并没有发现,因为 FX3 之前我的印象是即使是录制途中强制关机,也会及时地保存视频文件。直到我回家打开内存卡那一刻我才懵逼了:第一段视频文件不见了! 我立刻开始寻找各种有可能恢复文件的方法,同时去淘宝寻求帮助。不过淘宝给出的价格是 600 元,而且不一定能够恢复。我靠,我一共才赚几个钱,600给你了我还赚啥? 恢复文件 首先就是恢复文件,由于我是使用了索尼 FX3 和索尼的 CFA 卡,所以我的第一反应就是通过查找这两个关键词找到了最靠谱,并且免费的官方恢复软件:Memory Card File Rescue 。你通过输入存储卡对应的信息,它会帮你选择下载对应的恢复软件,真的是太贴心啦哈哈。通过大概8分钟的扫描,我就得到了恢复的文件,它是一个 12.68G 的 DAT 文件。 我查询了很多网站,并没有什么软件可以直接将 DAT 文件直接转换为 MP4 之类的东西。也有博客称 vlc 能干这个事儿,但事实上并不行。于是又开始了大量的搜索。如果你也看到了 B 站某个 UP 主自己写的恢复脚本的话,我可以告诉你,恢复出来的视频是上半部分花屏。我也尝试了使用 ffmpeg 来进行处理,结果当然也是无效的。 处理 DAT 文件 我恢复出来的 DAT 文件与正常的 MP4 文件区别主要是缺少了 moov 数据块, mdat 主要记录的是视频中的帧信息,moov 主要存储的是视频帧信息的读取格式。由于机器是突然断电的,所以来不及写入 moov 数据块,因此核心任务就是恢复 moov数据块。 由于我的第二段视频(第一段中断之后我立刻换电池接上了第二段)和第一段视频的录制规格等等信息是完全一样的,所以第一段的 moov 完全可以抄第二段视频的作业。当然,如果你没有可以抄作业的视频,你可以使用和 DAT 文件一致的规格再随便录几秒视频即可。 untrunc 这个伟大的开源工具帮我解决了恢复 moov数据块这个难题,如果你是 Windows 用户的话,可以阅读 untrunc中文 来学习如何使用。 恢复如旧 通过使用 untrunc ,我成功将 12.68G 的 DAT 文件恢复为了 12.68G 的 MP4。更让我感动的是,恢复之后的视频保留了原有的码率、帧率以及分辨率,画面恢复如新!...

六月 21, 2024 · 1 分钟

初识 WireGuard && 配置备忘录

最近因为想将自己写的音乐下载机器人部署到云上,于是开了一台 Hetnzer ,不得不说,质量是真好速度是真快呀!德意志战车!! ,突然心血来潮,准备配一个本机和 Hetnzer 的 WireGuard 连接。 学习和使用了 WireGuard 这么久,也没有自己正儿八经配一个。之前玩 DN42 的时候更多地是在抄作业,至于原理和细节,就根本没有去深究,不过也潜移默化了解了很多。 首先是服务端的配置(其实可能不太严谨,暂且称为服务端吧。) 还是以 Debian 为例 常规的安装: sudo apt update && apt install wireguard 贴一个我这次使用的服务端的 wg0.conf [Interface] PrivateKey = <服务端私钥> ListenPort = 520 Address = 10.0.0.1/24, fd00::1/64 PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = <客户端公钥> AllowedIPs = 10....

六月 10, 2024 · 3 分钟

通过 Ollama 使用本地部署 & 私有部署模型来使用 copilot

Ollama 使用本地模型来使用 copilot 最近 Mistral AI 开放了一个非常善于写代码的模型 codestral,只有 22B, 而我的 MacBook 可以轻松驾驭它,在运行时内存基本只调用 15G 左右,但是又想把它应用到 VScode,这样就可以替代 Github copilot 来更加安全地编写代码。 首先保证在本机已经已经安装了 Ollama 和模型 codestral ,参考官方的链接即可,非常简单。 想在 VScode 使用 类似于 copilot 的功能,一方面需要已经通过 Ollama 安装了 codestral 和 starcoder2 之后在 VScode 中安装插件 continue 。保证你的 Ollama 已经启动即可,你可以通过访问 localhost:11434 来验证它是否在运行。 之后在 continue 插件里面选择 local model 即可,记住,一定要安装 starcoder2 它是实现你成为 TAB 工程师的关键! Ollama 使用私有部署模型来使用 copilot 但是,并不是所有朋友的设备都具有在本地跑一个 22B 模型的能力,或者移动设备能力不足。这时候,如果你拥有一个性能还不错的主机设备,那么你可以选择将 Ollama 部署到主机上,然后远程访问它。 想访问它的前提是需要设置它运行在 0.0.0.0 上,让其他设备能够访问到这个服务,参考这里 : setting-environment-variables-on-linux Setting environment variables on Linux If Ollama is run as a systemd service, environment variables should be set using systemctl:...

六月 5, 2024 · 2 分钟