- 博客(45)
- 资源 (3)
- 收藏
- 关注
原创 什么是信息熵?KL散度以及交叉熵推导
本文系统性地介绍了信息论中的核心概念:信息量、熵、KL散度和交叉熵。首先通过实例说明信息量与事件概率成反比,并给出数学定义。熵被定义为系统不确定性的期望值,KL散度用于衡量两个概率分布的差异。在机器学习中,最小化KL散度等价于最小化交叉熵,因此交叉熵成为分类任务的核心损失函数。文章详细推导了这些概念之间的关系,并展示了在多分类和二分类任务中的具体应用形式,为理解信息论在机器学习中的作用提供了清晰的理论框架。
2025-12-10 01:02:15
545
原创 transformer(4)图解layernorm是怎么完成的
摘要:归一化是训练深层网络的关键技术,用于解决梯度消失或爆炸问题。文本领域采用LayerNorm(LN)而非BatchNorm(BN),因文本长度不固定且含无意义padding。LN对每个样本所有特征归一化,而RMSNorm简化计算仅用均方根。DeepNorm则针对超深层网络设计,结合残差连接优化数据分布。归一化位置分为层前(Pre-Norm)和层后(Post-Norm),前者更易训练但后者能力更强,适用于更大模型。具体选择需根据模型规模和实验效果确定。(150字)
2025-12-06 11:34:21
985
原创 模型评估指标:ROC曲线与PR曲线如何选择
场景特征推荐曲线为什么?典型例子正负样本均衡ROC此时两者表现差不多,但ROC不仅能评估模型,还能通过AUC直观给出模型的分数,便于横向对比。情感分析(好评/差评各半)、猫狗分类负样本极多 (正样本是稀疏的)PR我们更关心**“抓出来的正样本里,有多少是真的”。如果用ROC,FPR的变化会被巨大的负样本数量稀释,产生“模型效果很好”的幻觉**。欺诈检测(好人是绝大多数)、搜索排序(相关文档很少)、推荐系统需要剔除负样本ROC关注整体的分类能力,特别是需要控制误报率(FPR)在一定范围内时。
2025-12-02 01:33:19
595
原创 从 AdaGrad 到 AdamW:优化器的进化之路
本文系统梳理了深度学习优化器的进化历程:从牛顿法的理论理想出发,到AdaGrad引入梯度平方和模拟曲率,RMSProp改进为指数加权平均避免学习率衰减过快,再到集大成的Adam结合动量和自适应学习率。特别指出Adam在处理L2正则化时的缺陷,以及AdamW如何通过解耦权重衰减来解决这一问题,使其成为大模型训练的首选。各优化器的核心思想与适用场景形成鲜明对比,展现了算法设计中对计算效率与优化效果的持续权衡。
2025-12-01 00:49:51
924
原创 YaRN:解密扩展大模型上下文的方法
本文深入探讨了旋转位置编码(RoPE)及其扩展方法YaRN。RoPE通过旋转矩阵在query和key向量中注入位置信息,巧妙利用不同频率编码近距离和远距离位置关系。传统上下文窗口扩展方法(如位置内插)存在分辨率下降问题。YaRN基于NTK理论,提出非均匀缩放策略:高频维度保持原样,低频维度进行压缩。该方法通过引入阈值参数区分不同频率区域,实现更精细的扩展控制。相比直接内插,YaRN能在保持模型微观感知能力的同时,显著扩展上下文窗口,使模型处理长文本能力得到提升。
2025-11-28 01:07:13
1019
原创 深度学习中的常用希腊字母发音与用途速查表
本文整理了深度学习与数学中常用的希腊字母表,包含大小写、英文/中文注音及其典型含义。重点字母包括:α(学习率)、β(动量参数)、γ(折扣因子)、δ(梯度)、θ(模型参数)、λ(正则化系数)、μ(均值)、σ(标准差/Sigmoid函数)等。使用时需注意:同一字母在不同领域可能含义不同(如σ可表示求和或标准差),书写时需区分易混淆字母(如ν与v)。此外,模型参数的表示在不同学科存在差异(θ与w)。本表可作为数学符号的快速参考指南。
2025-11-27 09:59:50
1001
原创 transformer(三) 位置编码以及旋转位置编码RoPE详解
本文介绍了Transformer模型中位置编码的必要性及两种主要实现方式。首先指出Transformer缺乏序列顺序信息,因此需要位置编码来补充单词位置信息。传统绝对位置编码使用正弦余弦函数生成固定位置向量,但存在长文本位置信息不足的问题。随后重点介绍了旋转位置编码(RoPE),它通过旋转矩阵将相对位置信息融入自注意力计算,使内积结果仅与相对位置相关。RoPE的优势在于能更好学习token间的相对位置关系,尤其适合处理长文本序列。相比绝对位置编码,RoPE通过相对位置信息提高了模型性能,在短文本训练后只需少
2025-11-24 23:50:46
1131
原创 为什么分类模型使用交叉熵损失函数而不是均方误差?
在深度学习和机器学习领域,为模型选择正确的损失函数是至关重要的。对于回归问题,我们通常使用均方误差(Mean Squared Error, MSE)作为损失函数。然而,在处理分类问题时,交叉熵(Cross-Entropy, CE)损失函数却是更常见的选择。本篇文章将深入探讨为什么在分类任务中我们更倾向于使用交叉熵而不是均方误差。
2025-11-20 08:00:00
604
原创 为什么Transformer使用LayerNorm而不是BatchNorm?
摘要:本文对比了批量标准化(BN)和层标准化(LN)在深度学习中的差异及其适用场景。BN通过mini-batch的统计量进行特征维度标准化,能有效缓解内部协变量偏移问题,但难以处理NLP中的变长序列。而LN则在单个样本内部进行标准化,天然适配变长数据且不受batch size影响。Transformer选择LN主要基于三点:1)适应NLP变长序列特性;2)对小batch size不敏感;3)提供更稳定的训练动态。LN的样本级标准化方式更适合处理文本数据的独特性,这是其成为Transformer标配标准化方法
2025-11-19 08:00:00
938
原创 transformer(二) 多头注意力简介以及变种
本文介绍了自注意力机制的几种变种。首先解释标准自注意力机制的计算过程,包括QKV矩阵的获取和注意力矩阵的计算。然后介绍稀疏注意力,它通过限制每个位置的关注范围(如前k个位置)将复杂度从O(n²)降至O(kn)。接着讨论多头注意力,通过多个并行的注意力头捕捉不同特征。最后介绍两种多头变体:分组注意力(同组Q共享KV)和多查询注意力(所有Q共享KV),这两种方法都能显著降低计算量。这些变体在保持模型性能的同时提高了计算效率。
2025-11-18 00:55:10
262
原创 transformer 教程(一) qkv矩阵介绍以及为什么除以根号d推导
自注意力机制是Transformer模型的核心组件,它通过查询(Q)、键(K)、值(V)三个向量实现序列元素间的动态关联计算。具体过程包括:将输入嵌入向量与学习得到的权重矩阵相乘生成Q、K、V向量;通过点积计算注意力分数并进行√dk缩放以防止因高维导致的数值不稳定;最后对分数进行Softmax归一化并加权求和得到输出。其中,除以√d是关键技术,它能将点积结果的方差控制在1,避免梯度爆炸问题,确保模型训练的稳定性。这种机制使模型能够动态关注输入序列中的相关信息。
2025-11-16 14:12:13
841
原创 K折交叉验证(K-Fold Cross-Validation)深度解析
K折交叉验证(K-Fold CV)是一种可靠的模型评估方法,通过系统交换训练集和验证集来降低评估偶然性,并最大化利用数据。其核心目的是评估模型泛化能力和选择超参数,而非直接生成最终模型。K折CV流程包括数据随机划分、循环训练与验证以及性能汇总。对于类别不均衡数据,推荐使用分层K折CV,它能保持每一折的类别比例与原始数据集一致,从而提供更稳定的评估结果。最终确定最佳配置后,应在全部训练数据上重新训练模型用于预测部署。
2025-11-01 10:29:49
913
原创 Visual Studio 编译 onnxruntime 1.14.1 更低版本兼容Win7
Visual Studio 编译 onnxruntime 1.14.1 更低版本兼容Win7
2025-02-14 12:00:56
1020
原创 vmware网卡的网络连接模式记录
文章目录1. 定义两个概念:1.1 物理机/宿主机1.2 虚拟机:2. 网卡模式解释2.1 桥接模式2.2 NAT模式2.3 仅主机模式2.4 自定义模式3. 额外说明1. 定义两个概念:1.1 物理机/宿主机就是我们自己的这台电脑, 是实实在在存在的物理机, 因为安装了vmware可以装其他的虚拟机, 固有宿主机的意思1.2 虚拟机:也就是在vmware中使用镜像虚拟化出来的机器叫虚拟机.2. 网卡模式解释2.1 桥接模式此时虚拟机和物理机在同一个网络下, 也就是在同一个网段下面
2021-07-11 11:24:37
263
原创 车牌字符检测
1.问题描述对于一张已经检测并且经过矫正的车牌,为了能够识别出车牌上的字母,先将每个字符检测出来,然后对每个字符进行识别。本博客主要是讲述如何将字符检测出来,暂时不涉及字符的识别。利用的是传统的图像处理方法,基于连通区域的算法。2.解决方法概述对于一张车牌图片,首先转灰度图,然后利用阈值将图像变成二值图像。也就是像素值只有0和1(或者0和255)的图像。因为直接二值化后会有很多噪音,会出现字符之间会有连接在一起的情况,或者字符与图像边缘连接在一起的情况,合理利用形态学的开操作,去掉大部分的噪
2020-05-17 21:49:59
2554
原创 C++字符串的处理
目录字符串初始化字符串函数字符串大小,是否为空拼接插入找到子串位置字符串的遍历字符串的替换字符串初始化这是头文件#include <iostream>using namespace std;string s;// 空串长度为0cout << s.size() << endl;string s1 = "string...
2019-11-03 15:03:31
589
原创 Android调试工具ADB使用介绍
ADB简介ADB全称是android debug bridge(安卓调试桥),是一个命令行工具,我们通过adb命令可以直接与android设备进行通信利用adb命令我们可以模拟用户的操作,方便我们的调试过程.ADB的使用1.配置ADB与连接设备1.1配置adb环境变量默认环境下面可能没有adb,需要配置环境变量假如 $Andorid_SDK为你的sdk目录,那么adb在sdk...
2019-09-25 22:19:35
1065
原创 Android中文件存储路径
参考博客彻底搞懂Android文件存储—内部存储,外部存储以及各种存储路径解惑概览图路径旁边的 @link标志的 是他们的该路径获取方法/** * Android的存储结构 * * 1.内部存储(非内存): * /data {@link Environment#getDataDirectory()} * /data ...
2019-09-24 16:46:18
1251
原创 Java的有趣的char类型
参考文章Unicode中的数学符号我最初以为Java的char类型是占1个字节的,后来发现不是,目测是要占用两个字节显示基本字符我们一般的需求基本都是显示ASCII中有的字符如 1 2 3 4 a b c …但是输出这样的效果?22=4,23=82^2=4,2^3=822=4,23=8显示特殊字符其实java中的char显示的是unicode编码的字符,只要是unicode编...
2019-08-30 17:02:18
618
原创 Android事件传递机制
参考博客与书籍android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)Android高级进阶百度网盘1.概述1.1什么是触摸事件我们每对屏幕的一次操作(最常见就是点击,移动,和松开)都会产生触摸事件,每次产生的事件都会包含大量的信息(触摸点相对于当前View的x,y值,相对当前容器的x,y值,当前触摸的类型等)这些信息都被封装在一个MotionEvent类中...
2019-08-01 22:13:57
618
原创 矩阵求导
1.布局布局主要分为分子布局和分母布局,在我看来,分子布局就是被积项是一个行向量,分母布局被积项使列向量,而我们大部分情况都是默认一个向量为列向量,所以我们一般的求导都是分母布局,而本文所有的公式都是依照分母布局2.基本公式依我所见,矩阵求导只不过是矩阵的各部分对各个变量分开求导,然后又将分开求导的结果写成矩阵形式规定x为列向量:x=(x1,x2,⋯ ,x...
2019-06-19 16:28:46
6918
原创 Python 图片转数组,二进制互转
前言需要导入以下包,没有的通过pip安装import matplotlib.pyplot as pltimport cv2from PIL import Imagefrom io import BytesIOimport numpy as np1.图片和数组互转# 图片转numpy数组img_path = "images/1.jpg"img_data = cv2.imre...
2019-04-25 10:25:55
13549
1
原创 STM32通用定时器使用详解
1.通用定时器基本介绍通用定时器包括TIM2、TIM3、TIM4和TIM5STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。定时器可以进行定时器基本定时,输出4路PWM,输入捕获,本文利用定时器3展示并介绍这三个功能2.开发环境开发平台:keil5 单片机型号:STM32F...
2018-08-12 09:45:57
81086
21
原创 NVIC 中断优先级管理详解
1.NVIC(内嵌向量中断控制器)NVIC:Nested Vectored Interrupt Controller,STM32系列有84个中断,相对于的开发板STM32F103系统
2018-08-12 01:14:46
14343
1
原创 HC-05蓝牙模块使用教程
一 、模块简介 嵌入式蓝牙串口通讯模块(简称蓝牙模块)具有两种工作模式:命令响应工作模式和自动连接工作模式。 当模块处于命令响应工作模式(或者AT模式)时能才能执行 AT 命令,用户可向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。(AT指令就是我们PC与一些终端设备(例如蓝牙,WiFi模块)之间进行通信的,配置这些终端设备参数的一套指令。) 在自动连接工作模式下模块又可分为主...
2018-08-05 17:22:14
82431
22
原创 window 下 Android studio 上运行tensorflow
1.开发环境win10 x64 操作系统Android 的 IDE : Android Studio2.问题描述网上大多数教程,都是基于 Linux 的开发,对于window上使用tensorflow的描述较少大部分教程都是使用 bazel 来将tensorflow的源文件编译成so,jar文件,貌似这个工具对于Linux的支持还是不错的(但暂时不支持Linux 32的操作...
2018-06-17 14:38:16
3298
1
原创 一、LCD12864(带字库的)使用教程:
一、LCD12864简介LCD12864液晶显示,也就是屏幕上总共有128*64 ,个点,每个点就只有两种状态亮和不亮我这里使用的就是带字库的,直接可以显示中文,不需要自己去编码,发送数据使用8位并行模式。我这里不介绍怎么显示图片,不介绍指令,知识快速入门得到显示结果 二、引脚介绍1.一共有20个引脚,重要的只有那么几个3~VO就是调节对比度的,相当于调节每个点显示...
2018-05-03 13:55:56
103107
26
翻译 2.WiFi模块ESP8266使用教程
总器件:Esp8266模块,USB转TTL模块,同时电脑上要有”网络调试助手”和”串口助手”一般而言,当我们用USB转TTL模块与Esp8266连接之后,波特率默认为115200 当我们用这个模块箱Esp8266发送数据的时候,串口助手记得勾选”发送新行” 当我们上电之后Esp8266 我们串口助手一直接受到乱码,可能是电压过低,可以考虑将3.3V换成5V我们直接利用AT指...
2018-03-27 00:04:49
34294
2
原创 蓝桥杯串口2应用
#include<reg51.h>/* 串口2只能选定时器2作为波特率发生器 *///注意串口2:RXD2~P1^0,TXD2~P1^1//根据芯片手册说明,在单片机1T模式下(不12分频)串口在模式0(8位USART)波特率 = Sysclk/(65536-[T2H,T2L])/4//这个宏定义就是根据波特率来就算定时器应该设定的初值#define Baud_Rate...
2018-03-26 11:36:16
1180
1
原创 蓝桥杯转接板 定时器2使用
/* 定时器2延时10ms进入中断*///定义寄存器sfr AUXR = 0x8e; //辅助寄存器sfr T2H = 0xD6; //定时器2的高八位寄存器sfr T2L = 0xD7; //定时器2的低八位寄存器sfr IE2 = 0xAF; //中断使能寄存器//T2定时器的初始化void T2_Init(void){ /* AUXR的第三位就是设置 定时器2的...
2018-03-26 00:08:49
1852
原创 关于IIC协议之详解,这里代码主要是用于蓝桥杯的开发板上(针对初学者)
网上关于IIC协议的讲解颇多,但是对于初学者而言,看网上的例程代码总是很模糊,因为总有一两个代码看不懂,而看不到过多的解释,我这里主要是针对自己初学的时候走的许多弯路,将自己的所有所有见解落实到代码上,将每一行代码为什么这么做说清楚,尽量使大家明白,少走弯路IIC协议简介:两线式串行总线,一根数据线SDA和时钟线SCL,下面直接是IIC的时序图,具体每一步的操作和IIC协议的详解我将在代码上给大家...
2018-03-11 00:58:41
2298
1
Android_Launcher应用开发_示例代码.zip
2019-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅