面试题、面试代码题

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


面试题

面试代码题


array = [5, 3, 4, 0 ,1, 4, 1]原始数组, 找从第一个元素开始的下降序列。

- 找到下降序列: descent_seq = [5, 3, 0]
- 目标是寻找i, j, 现在需要确认这个i的下标一定出现在descent_seq中。
- 问题是怎么确认这件事? (反证法)
- 第一个结论: 那么我们一定还能找到一个k, 满足k<i, A[k]<A[i], 
  - 比如A[i] = 4, 这就是最后找到的那个i。
- 参考代码中 descent_array = ['O', 'O', 'X', 'O', 'X', 'X', 'X']
- 引申问题: 平时训练模型的代码中用到的那些已经封装好的算法!
  - 1: 大家平时只注意到这个算法能训练, 本质是可收敛。
  - 2: 容易忽略的是这个算法当初在发表论文的时候, 已经证明过它的收敛性了。
采用将整个数组元素依次执行异或操作,最终的结果值C就是那个唯一出现了一次的数字。

- 异或: x^y, 相同等于0, 不同等于1, 二进制的层面, 位运算
  - x = 0011010 = 2 + 8 + 16 = 26
  - y = 0111110 = 32 + 16 + 8 + 4 + 2 = 62
  - x^y = 0100100 =  32 + 4 = 36
  - x1 = 0011001
  - y1 = 0011001
  - x1^y1 = 0000000 = 0

def one_number(array):
		x = array[0]
		for i in range(1, len(array)):
				x = array[i] ^ x
		
		return x
- x = 3, y = 5, x + y = 8 复杂度等效于 x ^ y
- 异或操作不要求两个相同的值在一起, 因为异或操作满足"交换律"!!!
  - a^b^c = a^c^b
- 梯度剪裁, clip(gradients, -5, 5), 相当于所有在[-5, 5]区间外的梯度都被剪成-5, 5了, 相当于缩小了梯度范围, 就不会爆炸。
- 这个技术解决不了梯度消失!!!
CNN处理文本的核心操作.

- 1: 卷积窗口, [conv_length, embedding_dim], 第一个维度理解为单词的个数, 可以选择2, 3, 4, 5, .....
- 2: 不同的卷积窗口, 卷积的结果张量映射到对应不同长度的张量结果上。最后进行max_pooling + concat + 求均值。
nohup启动了咋退出?

- 1: 你明确的知道启动的进程名字
  - ps aux | grep program_name  显示进程的相关信息(pid)
  - kill -9 pid
- 2: 你对相关信息不明确
  - netstat -nltp  显示当前服务器的所有监听端口  5000 : pid - program
  - kill -9 pid
关于反向传播的推导。

- 核心: 在于损失函数对于Wi,j的偏导, 也就是网络权重。
- 因为optimizer.step()更新参数, 更新就是这些Wi,j = Wi,j - lr * delta(w)
可不可以 脱离 梯度?

- 答案: 不可以!
- Hinton提出的反向传播的算法, 建立在梯度更新之上的。
  - 1: 面对的求解问题, 本质上都没有算术解!(没有方程解!)
    - y = a * x + b ;  y = a1 * x1 + a2 * x2 + b
  - 2: 涉及到神经网络的极限!!!
    - 只能解决在几何上连续可导的问题!!!
关于MASK在Transformer中起的作用?

- Encoder: MASK - 为了让模型不过多的知晓信息。
- Decoder: MASK - 解码器端为了未来的信息不泄露。
设置参数max_len=最大的句子长度,有什么优缺点?

- 1: 如果最大的句子长度偏离主体太多, 会有太多的0填充, 会造成模型理解语义的偏差。
- 2: 增加了大量的无效计算。
- 3: 现实中的场景大量的符合正态分布, 取max_length, 偏离均值太多。
必须要填充0和截断吗?原语句长度不行吗?或者最大长度设定之后,只截断,不填充可以吗?

- 必须填充!!!
- 设计根本问题: 输入模型的张量维度保持一致
- tensor1正常的 [1, 50, 768] , tensor2不正常 [1, 28, 768] , 直接报错!!!
gunicorn -w 1 -b 0.0.0.0:5001 app:app ;这两个app分别指什么呢?

- 1: 第一个app, 代码文件叫app.py
- 2: 第二个app, 指代Flask的服务对象, @app.route()
- 3: 比如你的程序代码文件叫hello_kitty.py, 内部定义cat = Flask(name)
  - gunicorn -w 1 -b 0.0.0.0:5001 hello_kitty:cat
with torch.no_grad(): 模块, 在整个with 模块内部所有和梯度相关的操作都被冻结了。一旦出了with 模块, 一切又恢复正常行了。
关于划分数据集的方法

- 1: sklearn - train_test_split()
- 2: Data.random_split()
- 3: Data.DataLoader
- 4: yield x, y
NLP 四大任务 (分词, 分类,生成式,多句关系)
NLP几大类任务:

- 1: 分词任务
  - 分词
  - 词性标注
  - 命名实体识别
- 2:分类任务
  - 新闻主题分类
  - 人名分类器
  - 命名实体审核任务
- 3:生成式任务
  - 机器翻译
  - 文章摘要
- 4:多句关系任务
  - 聊天机器人
  - 问答系统
为什么一定要有Embedding()层?

- 1: 不是代码中必须有 (引入预训练好的词向量,就不需要了)
- 2:embedding层做的工作就是word2vec, 稠密向量的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

あずにゃん

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

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

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

打赏作者

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

抵扣说明:

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

余额充值