ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

归一化:激活函数

归一化:激活函数 激活函数.h// 激活函数.h —— 激活函数SiLU/Sigmoid/Softplus声明// 用途门控 RMSNorm 与 SwiGLU 等算子依赖的标量激活函数以及逐元素向量版本#pragmaonce// 引入基础类型浮点别名#include公共/基础定义.h// 激活SiLUSigmoid Linear UnitSwish 的 β1 特例// 公式$$ \mathrm{SiLU}(x) \frac{x}{1 e^{-x}} $$// 纯文本SiLU(x) x / (1 e^(-x))// 含义x 接近 0 时非线性过渡负值渐近于 0非饱和正值近似恒等// 用于 SwiGLU 的门控分支与门控 RMSNorm 的门控因子浮点 激活SiLU(浮点 x);// 激活Sigmoid逻辑斯蒂函数// 公式$$ \sigma(x) \frac{1}{1 e^{-x}} $$// 纯文本Sigmoid(x) 1 / (1 e^(-x))// 含义输出压缩到 (0,1)用于概率与门控信号的平滑映射浮点 激活Sigmoid(浮点 x);// 激活Softplus平滑 ReLUReLU 的可微近似// 公式$$ \mathrm{softplus}(x) \ln(1 e^{x}) $$// 纯文本Softplus(x) ln(1 e^x)// 数值稳定实现x 20 ? x : log1p(exp(x))避免大 x 时 exp(x) 上溢浮点 激活Softplus(浮点 x);// 激活SiLU向量对一段向量逐元素施加 激活SiLU// 参数输入 源向量起点输出 目标向量起点可与 输入 相同实现就地调用方传独立缓冲即可// 数量 要处理的元素个数void激活SiLU向量(constfloat*输入,float*输出,size_t 数量);激活函数.cpp// 激活函数.cpp —— 激活函数SiLU/Sigmoid/Softplus实现// 用途为归一化算子与后续 SwiGLU 提供标量与向量激活函数#include内核/归一化/激活函数.h// 引入标准头指数 exp 与对数 log1p数值稳定 Softplus#includecmath// 激活SiLUSigmoid Linear Unit// 公式SiLU(x) x / (1 e^(-x))// 实现直接按公式用 exp 计算x 为负值时 exp(-x) 增大但仍在浮点范围内浮点 激活SiLU(浮点 x){returnx/(1.0fstd::exp(-x));}// 激活Sigmoid逻辑斯蒂函数// 公式Sigmoid(x) 1 / (1 e^(-x))浮点 激活Sigmoid(浮点 x){return1.0f/(1.0fstd::exp(-x));}// 激活Softplus平滑 ReLU// 公式Softplus(x) ln(1 e^x)// 数值稳定x 20 时 e^x 已远超浮点精度直接返回 xln(e^x)x避免上溢浮点 激活Softplus(浮点 x){if(x20.0f){returnx;}// log1p(y) ln(1y)比 log(1y) 更精确避免 1e^x 灾难性消减returnstatic_cast浮点(std::log1p(std::exp(x)));}// 激活SiLU向量逐元素施加 激活SiLUvoid激活SiLU向量(constfloat*输入,float*输出,size_t 数量){for(size_t i0;i数量;i){输出[i]激活SiLU(输入[i]);}}
返回列表