华为ai算法笔试 华为笔试 华为秋招 1010

笔试时间:2025年10月10日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:经典LSTM模型结构实现

长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN),旨在解决传统RNN中存在的梯度消失和梯度爆炸问题,使其能够有效地学习长期依赖关系。

一个LSTM单元(Cell)的核心由三个关键的门和一个细胞状态(Cell State)组成:

  • 细胞状态(Cell State):这是LSTM的"记忆高速公路",信息沿着这条路径从一个时间步传递到下一个。
  • 遗忘门(Forget Gate):决定从上一时间步的细胞状态中丢弃哪些信息。通过Sigmoid激活函数,输出介于0和1之间的向量。0表示完全遗忘,1表示完全保留。
  • 输入门(Input Gate):决定将哪些新的信息添加到细胞状态中。包含两个部分:一个Sigmoid层,用于决定哪些信息需要更新一个Tanh层,用于创建一个新的候选细胞状态
  • 输出门(Output Gate):决定当前时间步的隐藏状态(Hidden State)将输出哪些信息。

根据给定的LSTM计算结构示意图,实现一个LSTM模型的关键函数。该LSTM模型包含5个LSTM Cell(每个Cell权重参数为wf、wi、wg、wo,对应偏置为bf、bi、bg、bo)。模型会依次处理输入序列的每个时间步(t=1到t=4),每个时间步的计算都会产生一个5维的隐藏状态h。

需要针对不同输入矩阵运行LSTM,并输出每个时间步隐藏状态h的首元素,按时间步顺序组成。

每个输入矩阵形状为4×7,即:

  • 时间步长(sequence_length)= 4
  • 输入数据维度(x_dim)= 7

输入描述

一行数据,描述输入矩阵:

  • 前2个数据为整型:sequence_length和x_dim
  • 后续为输入矩阵的浮点数据,按行平铺(flatten)为一维序列,数据用空格分隔

输出描述

一行数据,表示每个时间步隐藏层状态h的首元素,按时间步顺序输出,数据间用空格分隔。

精度要求:

  • 四舍五入到小数点后3位
  • 尾部多余的0去除,例如:0.200输出为0.2
  • 特殊情况:如果值为0、0.000、0.00、0.0,统一输出为0.0

样例输入

4 7 -1.153285 -0.081943 0.464549 3.411137 0.594197 1.21088 -0.234899 -0.272196 0.27

样例输出

0.01 0.003 0.009 -0.019

参考题解

解题思路:

LSTM通过三个门控机制(遗忘门、输入门、输出门)和一个细胞状态来维护长期记忆。每个时间步的计算都会更新细胞状态C和隐藏状态h。

计算步骤:

  1. 初始化状态:隐藏状态h和细胞状态C(5维零向量)
  2. 每个时间步的计算流程:计算遗忘门:f_t = sigmoid(W_f · [h_{t-1}, x_t] + b_f)计算输入门和候选状态:i_t = sigmoid(W_i · [h_{t-1}, x_t] + b_i),g_t = tanh(W_g · [h_{t-1}, x_t] + b_g)更新细胞状态:C_t = f_t * C_{t-1} + i_t * g_t计算输出门和隐藏状态:o_t = sigmoid(W_o · [h_{t-1}, x_t] + b_o),h_t = o_t * tanh(C_t)
  3. 输出处理:只取每个时间步隐藏状态h的第一个元素,进行格式化处理

Python:

import numpy as np

def f1(x):
    return 1 / (1 + np.exp(-x))

def f2(x):
    return np.tanh(x)

np.random.seed(42)
d1 = 5
d2 = 7

M1 = np.random.randn(d1, d1 + d2) * 0.01
M2 = np.random.randn(d1, d1 + d2) * 0.01
M3 = np.random.randn(d1, d1 + d2) * 0.01
M4 = np.random.randn(d1, d1 + d2) * 0.01

v1 = np.random.randn(d1) * 0.01
v2 = np.random.randn(d1) * 0.01
v3 = np.random.randn(d1) * 0.01
v4 = np.random.randn(d1) * 0.01

def calc(a, b, c, d):
    return f1(np.dot(a, np.concatenate((b, c))) + d)

def calc2(a, b, c, d):
    return f2(np.dot(a, np.concatenate((b, c))) + d)

data = input().strip().split()
n = int(data[0])
d2 = int(data[1])
vals = list(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

为啥给我发笔试提醒,但招聘页面显示啥也没有,我明明投了的,人麻了,而且我再投一次又显示我当前批次已经投过,啥意思这是?
有胆量的秋招人拒绝9...:我投的灵犀互娱也是一样的,上次发笔试我就没找到,今天又发还是没找到,难绷
投递菜鸟集团等公司10个岗位
点赞 评论 收藏
分享
1. 请先做个简单的自我介绍?重点介绍一下自己在大学期间与数据分析相关的经历。2. 你最近5年的职业规划是什么,能否详细谈谈毕业后如何朝着目标逐步推进?3. 你应聘这个岗位的优势是什么?劣势是什么?请分别从专业知识、学习能力、沟通协作三方面说明。4. 为什么选择应聘我们4399公司的数据分析培训生(校招)岗位呢?有什么特别的原因吗?5. 能不能谈谈对我们4399公司产品和互联网游戏行业数据分析情况的了解?6. 你期望的薪酬是多少?结合应届生身份以及该岗位要求谈谈你的想法。7. 大学期间最喜欢哪一门专业课程?为什么喜欢这一门课程,对数据分析有何帮助?8. 用三个词,总结一下这几年自己大学的经历?并阐述每个词背后所代表的具体含义。9. 大学期间都参加过哪些社团或者学生组织?可否详细谈一谈在其中担任的角色和工作内容?10. 平时有什么兴趣爱好?有什么特长吗?这些对从事数据分析培训生岗位有什么潜在作用?11. 假设让你监控市场投放数据,面对海量数据你会如何进行初步筛选与重点关注?12. 若在分析市场投放数据时发现异常情况,你会采取哪些步骤来深入分析原因?13. 当需要产出数据报告为业务决策提供支持时,你认为报告的关键要点有哪些?14. 谈谈你对与市场、运营、素材部门紧密联系并结合数据分析沟通改进意见的理解。15. 若跟进改进意见执行情况,你会通过什么方式确保信息准确及时反馈和有效落实?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务