从零手写RNN&BiRNN:从原理到双向实现

《AI实战嵌入式Agent +MCP+skill》课时2.5|定时器实战 本课讲解定时器时基单元原理,通过PSC、ARR、CNT三寄存器配合实现精确周期控制。以84MHz时钟为例,计算得PSC=8399、ARR=9999可实现1秒溢出周期。采用HAL_TIM_Base_Start_IT启动定时器更新中断,在HAL_TIM_PeriodElapsedCallback中处理周期任务,实现非阻塞、高精度的定时。相比HAL_Delay的阻塞式延时,定时器中断方案不占用主循环,支持并发操作,是嵌入式系统中实现周期任务的高效方式。 阅读详情

在学习深度学习框架时,调用API往往只是一行代码,但理解其内部计算原理才能真正掌握模型。本文将从头实现RNN(循环神经网络)的前向传播,包括单向和双向版本,并与PyTorch官方实现进行对比验证。

一、RNN基础原理

RNN
BiRNN

核心公式

RNN的计算公式如下:

ht=tanh(Wihxt+bih+Whhh(t−1)+bhh) h_t = \text{tanh}(W_{ih}x_t + b_{ih} +W_{hh}h_{(t-1)}+ b_{hh}) ht​=tanh(Wih​xt​+bih​+Whh​h(t−1)​+bhh​)

其中:

  • hth_tht​: 表示当前状态
  • xtx_txt​: 表示当前时刻的输入
  • WihW_{ih}Wih​: 表示RNN对当前输入xtx_txt​的权重矩阵——从输入层到隐藏层的权重矩阵
  • bihb_{ih}bih​: 表示RNN对当前输入xtx_txt​的偏置
  • h(t−1)h_{(t-1)}h(t−1)​: 表示RNN上一时刻的状态
  • WhhW_{hh}Whh​: 表示RNN对h(t−1)h_{(t-1)}h(t−1)​的权重矩阵——从隐藏层到隐藏层的权重矩阵(循环连接)
  • bhhb_{hh}bhh​: 表示RNN对h(t−1)h_{(t-1)}h(t−1)​的偏置

PyTorch RNN参数详解

参数:

  • input_size – 输入 xxx 中期望的特征数量(输入特征维度)
  • hidden_size – 隐藏状态 hhh 中的特征数量(隐藏层维度)
  • num_layers – 循环层的数量。例如,设置 num_layers=2 表示将两个RNN堆叠在一起形成堆叠RNN,其中第二个RNN接收第一个RNN的输出并计算最终结果。默认值:1
  • nonlinearity – 要使用的非线性激活函数。可以是 'tanh' 或 'relu'。默认值:'tanh'
  • bias – 如果为 False,则该层不使用偏置权重 bihb_{ih}bih​ 和 bhhb_{hh}bhh​。默认值:True
  • batch_first – 如果为 True,则输入和输出张量的格式为 (batch, seq, feature)(批次大小、序列长度、特征维度),而不是 (seq, batch, feature)。注意:这不适用于隐藏状态或细胞状态。详见下方输入/输出部分。默认值:False
  • dropout – 如果非零,则在除最后一层外的每个RNN层输出上引入 Dropout 层,dropout 概率等于该参数值。默认值:0
  • bidirectional – 如果为 True,则变为双向RNN。默认值:False,如果设置为True,则输出的大小是两倍的hidden_size

输入:input, hx

  • input: 张量的形状为:

    • LLL is seq_len, NNN is batch size and HinH_{in}Hin​ is input size.
    • 非批处理输入:(L,Hin)(L, H_{in})(L,Hin​)
    • batch_first=False 时:(L,N,Hin)(L, N, H_{in})(L,N,Hin​),(seq, batch, feature)
    • batch_first=True 时:(N,L,Hin)(N, L, H_{in})(N,L,Hin​),(batch, seq, feature)

    包含输入序列的特征。输入也可以是打包的变长序列(packed variable length sequence)。

  • hx: 张量的形状为:

    • 非批处理输入:(D×num_layers,Hout)(D \times \text{num\_layers}, H_{out})(D×num_layers,Hout​)
    • 批处理输入:(D×num_layers,N,Hout)(D \times \text{num\_layers}, N, H_{out})(D×num_layers,N,Hout​)

    包含输入序列批次的初始隐藏状态。如果未提供,默认为零。

其中:

N=batch size(批次大小)L=sequence length(序列长度)D=2 如果 bidirectional=True,否则为 1Hin=input_size(输入维度)Hout=hidden_size(隐藏层维度) \begin{aligned} N &= \text{batch size(批次大小)} \\ L &= \text{sequence length(序列长度)} \\ D &= 2 \text{ 如果 bidirectional=True,否则为 } 1 \\ H_{in} &= \text{input\_size(输入维度)} \\ H_{out} &= \text{hidden\_size(隐藏层维度)} \end{aligned} NLDHin​Hout​​=batch size(批次大小)=sequence length(序列长度)=2 如果 bidirectional=True,否则为 1=input_size(输入维度)=hidden_size(隐藏层维度)​

输出:output, h_n

  • output: 张量的形状为:

    • 非批处理输入:(L,D×Hout)(L, D \times H_{out})(L,D×Hout​)
    • batch_first=False 时:(L,N,D×Hout)(L, N, D \times H_{out})(L,N,D×Hout​)
    • batch_first=True 时:(N,L,D×Hout)(N, L, D \times H_{out})(N,L,D×Hout​)

    包含RNN最后一层在每个时刻 ttt 的输出特征 (ht)(h_t)(ht​)。

  • h_n: 张量的形状为:

    • 非批处理输入:(D×num_layers,Hout)(D \times \text{num\_layers}, H_{out})(D×num_layers,Hout​)
    • 批处理输入:(D×num_layers,N,Hout)(D \times \text{num\_layers}, N, H_{out})(D×num_layers,N,Hout​)

    包含批次中每个元素的最终隐藏状态。

二、手撕单向RNN

首先准备数据,并调用PyTorch官方API作为对比基准:

import torch
import torch.nn as nn

batch_size, sequence_len = 2, 3
input_size, hidden_size = 2, 3 #输入层大小即(num_features), 隐藏层大小

input = torch.randn(batch_size, sequence_len, input_size) # 随机初始化一个输入特征序列 input: [B, L, Hin(input_size)]
h_prev = torch.zeros(batch_size, hidden_size) # 初始化隐含状态 h_prev: [B, hidden_size]

# step1 调用PyTorch RNN API
rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True)

# rnn_output: [B, L, D*Hout] state_final: [D*numlayers, B, Hout]
rnn_output, state_final = rnn(input, h_prev.unsqueeze(0)) 

接下来是核心部分——手动实现RNN前向传播:

# step2 手写一个rnn_forward(), 实现单向RNN的计算原理
def rnn_forward(input, weight_ih, weight_hh, bias_ih, bias_hh, h_prev):

    # weight_ih: [Hout, Hin] 即 [h_dim, Hin]
    # weight_hh: [Hout, Hout]
    batch_size, sequence_len, input_size = input.shape
    
    h_dim = weight_ih.shape[0] # h_dim is hidden_size   weight_ih:[Hout, Hin] 
    h_out = torch.zeros(batch_size, sequence_len, h_dim) # [B, L, Hout] 初始化一个输出状态矩阵

    for t in range(sequence_len):
        # input: [B, L, Hin]
        # 获取当前时刻输入特征
        x = input[: , t, :] # 获取在所有batch下, 第t时刻下, 全部的input
        # 所以x: [B, Hin]
        x = x.unsqueeze(2)
        # x.unsqueeze(2): [B, Hin, 1]
        # weight_ih: [Hout, Hin]
        # weight_ih_batch: [1, Hout, Hin]--->[B, Hout, Hin]
        # weight_hh_batch: [1, Hout, Hout]--->[B, Hout, Hout]
        weight_ih_batch = weight_ih.unsqueeze(0).tile(batch_size, 1, 1) # [B, Hout, Hin]
        weight_hh_batch = weight_hh.unsqueeze(0).tile(batch_size, 1, 1) # [B, Hout, Hout]

        # torch.bmm() Batch Matrix Multiplication(批次矩阵乘法),用于对多个矩阵对同时进行矩阵乘法
        # 可以用torch.matmul()代替
        # weight_ih_batch: [B, Hout, Hin]
        # x: [B, Hin, 1]
        w_times_x = torch.bmm(weight_ih_batch, x) # w_times_x: [B, Hout, 1]
        w_times_x = w_times_x.squeeze(-1) # w_times_x: [B, Hout]

        # h_prev: [B, Hout]
        # weight_hh: [B, Hout, Hout]
        # h_prev.unsqueeze(2): [B, Hout, 1]
        w_times_h = torch.bmm(weight_hh_batch, h_prev.unsqueeze(2)) # w_times_h: [B, Hout, 1]
        w_times_h = w_times_h.squeeze(-1) # w_times_h: [B, Hout]

        h_prev = torch.tanh(w_times_x + bias_ih + w_times_h + bias_hh) # h_prev: [B, Hout]
        
        # 将当前时间步的隐藏状态 h_prev 存入 h_out 的第 t 个位置。
        # h_prev: [B, Hout]
        # h_out[:, t, :]: [B, Hout]
        # h_out: [B, L, Hout]
        h_out[:, t, :] = h_prev
    
    h_prev = h_prev.unsqueeze(0) # h_prev:[B, Hout]--->[1, B, Hout]
    return h_out, h_prev # h_out: [B, L, Hout]  h_prev: [1, B, Hout]

关键实现细节解析:

  1. 批次矩阵乘法(bmm):为了实现批次并行计算,需要将权重矩阵扩展到批次维度。weight_ih.unsqueeze(0).tile(batch_size, 1, 1) 将 [Hout, Hin] 扩展为 [B, Hout, Hin],使得每个样本都能应用相同的权重进行并行计算。

  2. 维度对齐:输入 x 的形状是 [B, Hin],通过 unsqueeze(2) 变为 [B, Hin, 1],这样与 [B, Hout, Hin] 进行 bmm 后得到 [B, Hout, 1],再 squeeze 回 [B, Hout]。

  3. 状态存储:h_out 用于存储所有时间步的输出(对应PyTorch的 output),而 h_prev 在循环结束后保存最后时刻的状态(对应PyTorch的 h_n)。

验证实现正确性:

# 验证单向RNN的准确性
# k是参数, v是name, 获取前面调用RNN 的API的参数, 以该参数输入我们手搓的单向RNN, 如果结果与RNN API的输出结果一致, 说明成功

custom_rnn_output, custom_state_final = rnn_forward(
        input, rnn.weight_ih_l0, rnn.weight_hh_l0,
        rnn.bias_ih_l0, rnn.bias_hh_l0, h_prev
)

print("Pytorch API output:")
print(rnn_output, state_final)
print("rnn_forward function output:")
print(custom_rnn_output, custom_state_final)

如果两者输出一致,说明我们的手写实现与PyTorch内部计算逻辑完全吻合。

三、手撕双向RNN(Bi-RNN)

双向RNN包含两个独立的RNN:一个按正序处理序列(Forward),一个按逆序处理序列(Backward)。最终输出是两者拼接。

# step3 手写一个bidirectional_rnn_forward(), 实现双向RNN的计算原理
def bidirectional_rnn_forward(
    input, weight_ih, weight_hh, bias_ih, bias_hh, h_prev,
    weight_ih_reverse, weight_hh_reverse, bias_ih_reverse, bias_hh_reverse, h_prev_reverse,
):
    # weight_ih: [Hout, Hin] 即 [h_dim, Hin]
    # weight_hh: [Hout, Hout]
    batch_size, sequence_len, input_size = input.shape
    
    h_dim = weight_ih.shape[0] # h_dim is hidden_size   weight_ih:[Hout, Hin] 
    h_out = torch.zeros(batch_size, sequence_len, h_dim*2) # [B, L, Hout*D] 初始化一个输出状态矩阵, 双向是两倍的特征大小

    # forward layer
    forward_output = rnn_forward(input, weight_ih, weight_hh, bias_ih, bias_hh, h_prev)[0] # 只获取`output`

    # backward layer
    # torch.flip(input, dims):沿指定维度翻转张量,dims 是要翻转的维度列表。
    # 需要翻转sequence_len
    backward_output = rnn_forward(
                        torch.flip(input, [1]), weight_ih_reverse, weight_hh_reverse,
                        bias_ih_reverse, bias_hh_reverse, h_prev_reverse
                       )[0] # 只获取`output`
    
    # 把forward_output 和 backward_output填充到h_out中
    h_out[:, :,:h_dim] = forward_output
    h_out[:, :, h_dim: ] = torch.flip(backward_output, [1])

    # 获取最后一个维度的状态
    h_n = torch.zeros(batch_size, 2, h_dim) # h_n: [B, 2, Hout]
    h_n[:, 0, :] = forward_output[:, -1, :] # 最后时刻的状态在L=0时候, 拼接上forward_output倒数第一个时刻的全部Hout
    h_n[:, 1, :] = backward_output[:, -1, :] # 最后时刻的状态在L=1时候, 拼接上backward_output倒数第一个时刻的全部Hout
  
    h_n = h_n.transpose(0, 1) # h_n: [2, B, Hout]
    
    # h_out: [B, L, Hout*2]
    # h_n: [2 , B, Hout]
    return h_out, h_n

双向RNN的实现要点:

  1. 反向处理:使用 torch.flip(input, [1]) 将序列沿时间维度翻转,这样原来的最后一个时间步变成了第一个,实现了反向传播。

  2. 输出拼接:h_out 的形状是 [B, L, Hout*2],前 Hout 维存储正向结果,后 Hout 维存储反向结果。注意反向输出需要再次 flip 回来,保证时间步对齐。

  3. 最终状态处理:h_n 需要包含两个方向的最后状态。注意对于反向层,虽然我们在翻转后的序列上计算,但 backward_output[:, -1, :] 实际上对应原序列的第一个时间步的状态(因为翻转了)。

验证双向RNN:

# 验证一下bidirectional_rnn_forward的正确性
bi_rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True, bidirectional=True)
h_prev = torch.zeros(2, batch_size, hidden_size)
bi_rnn_output, bi_state_final = bi_rnn(input, h_prev)

custom_bi_rnn_output, custom_bi_state_final = bidirectional_rnn_forward(
    input, bi_rnn.weight_ih_l0, bi_rnn.weight_hh_l0,
    bi_rnn.bias_ih_l0, bi_rnn.bias_hh_l0, h_prev[0],
    bi_rnn.weight_ih_l0_reverse, bi_rnn.weight_hh_l0_reverse,
    bi_rnn.bias_ih_l0_reverse,
    bi_rnn.bias_hh_l0_reverse, h_prev[1],
)

print("Pytorch API output:")
print(bi_rnn_output, bi_state_final)
print("custom bi_rnn_forward function output:")
print(custom_bi_rnn_output, custom_bi_state_final)

四、RNN的优缺点总结

  • RNN的优点:

    • 可处理变长序列
    • 模型大小与序列长度无关
    • 计算量与序列长度呈线性增长
    • 考虑历史信息
    • 便于流式输出
    • 权重时不变
  • RNN的缺点:

    • 串行计算比较慢
    • 无法获取太长的历史信息(梯度消失/爆炸问题)

五、总结

通过手撕RNN的实现,我们深入理解了:

  1. 循环机制:隐藏状态如何在时间步之间传递
  2. 批次处理:如何使用 bmm 实现高效的并行计算
  3. 双向结构:如何通过翻转序列实现双向信息融合
  4. 维度对齐:理解PyTorch中各种 [B, L, H]、[L, B, H] 等格式转换

虽然实际项目中我们直接使用 nn.RNN 即可,但这种底层实现训练有助于理解更复杂的变体(如LSTM、GRU)以及进行自定义修改(如加入注意力机制等)。


完整代码已验证:上述代码可直接运行,输出结果与PyTorch官方API完全一致,证明我们的数学推导和实现逻辑正确无误。

088、多摄像头跨镜目标追踪 ID 频繁切换?ReID 特征 + 轨迹关联 + 时间约束方案 文章摘要:本文针对多摄像头跨镜目标追踪中ID频繁切换的问题,提出了一种结合ReID特征、轨迹关联和时间约束的综合解决方案。作者分析了ID切换的三个主要原因:ReID特征不稳定、轨迹关联依赖最近邻匹配以及忽略时间约束。通过改进ReID特征提取(多层特征融合)、引入轨迹预测(卡尔曼滤波)和添加时间窗口约束,成功将ID切换率从35%降至3%以下。文章详细分享了实现细节和踩坑经验,为跨摄像头目标追踪提供了实用优化思路。 阅读详情

相关推荐

【RDMA】13. RDMA之用户态与内核态交互

原文:https://zhuanlan.zhihu.com/p/346708569 在“RDMA之Verbs”一文中我们说道,Verbs API分为用户态和内核态,分别以ibv_和ib_作为前缀。RDMA技术的最大的优势就在于用户态可以绕过内核,直接控制硬件收发数据,减少了系统调用和内存拷贝次数,所以大部分的RDMA应用都是用户态应用,即使用以ibv_为前缀的用户态Verbs API。 但是并非所有的用户态Verbs API都可以完全绕开内核,本文中我来讲解一下哪些API依赖于内核RDMA子系统(包括驱

我的笔记本 4285

通俗理解双向RNN(Bi-RNN)

本文深入探讨了双向循环神经网络(Bi-RNN)的原理与应用。Bi-RNN通过结合前向和后向RNN层,有效解决了传统RNN单向信息流动的局限性,能够同时捕捉序列数据的上下文信息。文章首先回顾RNN基础知识,分析其梯度消失和单向限制等缺点;然后详细解析Bi-RNN的核心思想、数学推导和工作原理,包括隐藏状态计算和输出融合;最后提供PyTorch代码实现示例,展示其在NLP任务中的应用。Bi-RNN相比单向RNN能提升5-10%的准确率,特别适合需要上下文理解的离线任务,如文本分类、语音识别等。文中包含清晰的数学

1058

无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误怎么解决

本文的内容是无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误的解决办法。

西岸贤 1万+

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 320

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

如何将一个向量投影到一个平面上_线性代数19——投影矩阵和最小二乘

一维空间的投影矩阵  先来看一维空间内向量的投影:  向量p是b在a上的投影,也称为b在a上的分量,可以用b乘以a方向的单位向量来计算,现在,我们打算尝试用更“贴近”线性代数的方式表达。  因为p趴在a上,所以p实际上是a的一个子空间,可以将它看作a放缩x倍,因此向量p可以用p = xa来表示,只要找出x就可以了。因为a⊥e,所以二者的点积为0:  我们希望化简这个式子从而得出x:  x是一个实数...

weixin_39741101的博客 5229

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 167

Transformer 面试题及详细答案120道(1-10)-- 基础概念

本文总结了Transformer模型的10个常见面试问题及答案,涵盖了其核心结构、创新点、工作机制等关键知识点。主要内容包括:Transformer的自注意力机制和多头注意力机制创新点,相比RNN/CNN的优势,模型在《Attention Is All You Need》论文中的提出背景,以及Encoder-Decoder协同工作流程等。重点解析了位置编码的作用、长距离依赖处理能力、与传统注意力机制的区别等核心问题。每个问题都给出了简明扼要的专业解答,适合作为Transformer相关面试准备的参考资料。

大剑师兰特的GIS世界 849

我用 GPUWorks 在 M1 Pro 上搭了个发票识别原型

公司里经常要看电子发票。我想先做个小原型:把 PDF 发给一个自己部署的图文模型,让它提取发票类型、日期、交易双方和金额,再把结果交给同事核对。这个原型不用先接财务系统,先看看从部署到调用要走多少步,模型返回的内容能不能帮上忙。

鸽芷咕的博客 1万+

全志T527-TP9930-Camera

TP9930 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 BT656/BT1120 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3233

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

您您这可以把问小白的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭

第三层是格式编译层。这个决策背后的判断很清晰:一个批量导出工具的价值,不在于“试三次”,而在于你真正用它处理了几十份技术文档、访谈记录或课程讲义之后,它是否值得留在你的工作流里。问小白的会话列表通过分页接口加载,AI导出鸭 在页面运行时建立旁路监听,捕获每一次分页请求返回的完整对话清单,包括会话 ID、标题、时间戳和隐藏的元数据字段。让AI导出回归优雅——这句话说的是:导出不该是体力活,而应该是一次完整的、可预期的文件交付。注意:这里的“批量”指的是左侧列表里的多个独立会话,不是一条会话内的多轮对话。

laoyunsi的博客 226

n8n AI高效工作流自动化 部署使用教程

摘要: n8n是一款开源可视化工作流自动化工具,结合AI能力可高效解决重复性任务。文章详细介绍了从Docker部署到实战应用的完整流程:1)通过Docker Compose自托管n8n,确保数据可控;2)以AI客服日报机器人为例,演示如何串联工单系统、ChatGPT和邮件通知,实现定时自动化;3)进阶搭建交互式AI助手,利用ToolsAgent节点调用业务API;4)整合向量数据库构建RAG知识库问答。关键建议包括:拆分复杂工作流、严格管理凭据、区分开发与生产环境,并建议从高频刚性需求(如日报生成)切入,逐

专注AI大模型,软件混淆,授权 266

在Codex 让AI模型 拥有长期智能记忆

本文介绍Claude-Mem V15新功能——智能记忆召回,解决AI遗忘、重复提示、执行不一致等问题。通过本地部署claude-mem,实现自动记录决策(如数据库选型)、跨会话智能召回,支持记忆写入、检索、遗忘全流程闭环。相比传统记忆方案,其基于Hooks自动捕获工具调用,结构化存储,可追溯、可共享、可清理,显著提升工程效率与协作一致性,是长期项目中理想的“工作黑匣子”与“工程脑”。

米莱虾 262

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

医疗 AI 有两种,别混着谈:一个改流程,一个改范式

InfoXMed 是面向医生、医学生和医学科研人员的 AI 医学工具平台,提供文献检索、全文翻译、AI 解读、指南查询和题库练习等功能,辅助临床学习、科研汇报与医学备考。原文是日本医学会杂志(JMA Journal)的一篇综述(Review Article):基本事实:这一点必须先说清:这篇论文提出的是一个研究纲领。它文中的"预测"指的是科学设想,不是可以拿来用的临床预测能力。文中甚至自己承认了一个硬缺口(见第三节)。本文只谈它的术语辨析与科学方法论,不转述任何可作为临床依据的预测或处置主张。这篇论文的全部

2601_96948740的博客 210

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

河道漂浮物目标检测数据集

目标检测,yolo,河道漂浮物目标检测数据集

DL_data_set的博客 181

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

AI Agent之核心框架

A: 显式 Thought 有三类价值:可解释性(便于人类审计)、可调试性(定位哪一步选错工具)、学习信号(可做监督微调或评估中间步骤质量)。ReAct 把推理与 可执行行动 绑定,每一步行动后都有 真实 Observation 反馈,从而用工具结果约束生成,降低闭卷幻觉。做完不等于结束——还要 评估做得好不好,把 教训 记下来,下次 带着教训重试,反思作为 记忆,影响后续尝试的策略。工作流程:Action → Evaluation → Reflection → Retry。A: 普通 CoT 只在。

剑雨巍巍的博客 182

AI 应用开发工程师技术实践:大模型接入、通用组件封装与性能优化

本文提出AI应用从PoC到生产的核心挑战:模型调用的持续可用、可控与可优化。通过构建统一LLM网关实现多供应商路由与故障转移,封装对话、工具调用与RAG组件以解耦业务逻辑,结合前缀缓存、批处理与流式背压治理等性能优化手段,形成“接通→接稳→接快”的工程路径,最终以工程化能力决定AI应用的生产可用性。

2301_79189962的博客 529

大模型 Embedding 与向量相似度详解

Embedding 解决的问题:计算机不懂文字,但懂数字│▼文本 → 向量(1024维浮点数数组)│▼相似度解决的问题:怎么判断两个向量(文本)有多接近│▼余弦相似度:看向量方向的夹角,越接近0°越相似│▼最终效果:语义搜索——理解意思,而非字面匹配一句话总结:Embedding 把文字变成数字,余弦相似度比较数字的方向,两者结合实现了"理解语义"的搜索。

T3165919332的博客 69

AI前沿日报 · 2026-11-04 | 祛魅时刻:Astra“纯读权重“神话的崩塌

①Astra"裸权重通吃"被spaCy创始人Honnibal精准祛魅——仅1/3实验真裸读,数学能力提升依赖Python+50次迭代;②Simon Willison用Qwen 3.8-27B端侧复现权重空间编程;③Nvidia开源Auto-Ontology自动知识图谱;④$800开源全域抓取机器人Stringman;⑤OpenAI悄然重开Codex训练开关引信任危机;⑥DeepMind发布Gemini 4 Argon机器人基础模型;⑦美国科技巨头隐性AI债务达3.2万亿美元,6个月增90%。

johnsong2009的博客 514

GPT-1 架构和计算细节

下面配合框图,对 GPT-1 的每个组件做公式展开 + 数值实例(配置:12 层 × 768,12 头,FFN 3072,词表 40478,共 117M 参数)。GPT-1 把翻译模型的编码器-解码器砍掉一半,只留解码器,然后以"预测下一个词"为目标在 BooksCorpus 上预训练。与 2017 原版的四个架构差异(框图中标 ★):h0=E[token]+Epos[position],E∈R40478×768, Epos∈R512×768h^0 = E[\text{token}] + E_{pos}[\

eloudy的专栏 241

终端 AI 审计与 “龙虾” 类智能体风险治理:从可见性到闭环溯源

生成式 AI 办公普及之后,数据泄露风险逐步下沉到终端。员工将合同、源代码、客户资料粘贴至公有大模型,以及龙虾(OpenClaw)这类本地开源 AI 智能体的滥用,成为企业安全新挑战。传统网络边界防护存在审计盲区,本文从风险链路拆解、核心能力模型、分级治理策略、落地踩坑点以及技术局限性多角度,分享终端侧 AI 安全治理的实践思路。

2401_86491085的博客 613

2.53 基于极稀疏指纹的室内定位注意力图元学习

该论文发表于IEEE Transactions on Mobile Computing(TMC)2026年6月,面向极稀疏指纹条件下的WiFi室内定位,针对指纹采集人力成本高、标记指纹稀缺时定位精度大幅下降的痛点,提出注意力图元学习模型AGML(Attentional Graph Meta‑Learning),结合图神经网络、元学习、两种指纹数据增强与分布对齐技术,在标记指纹极少的场景实现高精度室内定位,同时公开了多套真实+仿真定位数据集用于基准测试。场景:二维室内空间,障碍物造成信号遮挡,

weixin_42963026的博客 319

语音识别与语音合成的技术原理及应用

语音识别 #语音合成 #人工智能 #大模型。语音识别与语音合成的技术原理及应用。一、语音识别的核心原理。二、语音合成的核心原理。三、工程落地的主要难点。五、需要关注的现实问题。

weixin_62919816的博客 184

设计师工作室 GEO 实操:如何提升 AI 实体推荐概率

设计工作室 GEO 的本质,是把创意服务转化为 AI 可理解的结构化信息。核心动作可归纳为:区分事实与审美、建立实体图谱、预判用户提问、输出脱敏内容、搭建多信源、持续测试验证。梳理工作室的 6 个实体属性:品类、城市、流程、边界、团队、渠道。在官网或作品集平台发布至少 3 篇结构化项目复盘,只陈述事实。输出 1 篇「设计报价影响因素」科普内容,覆盖甲方高频提问。争取 1 次行业媒体或本地媒体专访,形成第三方信源。每周用「XX 城市 + 品类 + 设计工作室推荐」指令测试,记录出现频率。

goujunwe的博客 319

AI作图软件技术选型:从4个技术维度出发的实测对比

AI作图软件技术选型:从4个技术维度出发的实测对比

Vbaoke的博客 193
上一篇: 从零手写Transformer:基于每一步shape变化拆解与PyTorch实现
下一篇: 从零手写LSTM:从门控原理到PyTorch源码级实现
Network_Engineer
博客等级 码龄4年 2047粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Network_Engineer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值