根据面经复习
手写Conv2d
BN,LN/LSTM/GRU/Transformer一些基础
def corr2d(X, K):
n, m = X.shape
h, w = K.shape
Y = torch.zeros((n - h + 1, m - w + 1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
return Y
class Conv2D(nn.module):
def __init__(self, kernel_size):
self.weight = nn.Parameter(torch.rand(kernel_size))
self.bias = nn.Parameter(torch.zeros(1))
def forword(self, x):
return corr2d(x, self.weight) + self.bias
独立同分布假设:假设训练数据和测试数据是满足相同分布的。
如果输入层数据不做归一化,很多时候网络不会收敛。
每一层经过运算之后,前面层训练参数的更新将导致后面层输入数据分布的变化。并且后面的层会将网络前几层微小的改变累积放大。会导致两个后果:
2022-11-22 一面
2022-11-23 二面
自我介绍
问项目。问的很详细。除了项目本身
算法题伪代码。完全背包最小方案数
根据面经复习:https://www.nowcoder.com/discuss/post/398861072390778880
逐个介绍项目,问的很详细
从公式的角度说明一下L2损失为什么会平滑
解决模型过拟合的方法
为什么L1正则化可以缓解过拟合
代码
(1)快排
(2)手写卷积
L1范数是指向量中各个元素绝对值之和。
参数值大小和模型复杂度是成正比的。越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,较大的参数值才能产生较大的导数。这就容易产生过拟合。
因此复杂的模型,其L1范数就大,最终导致损失函数就大。最小化损失函数就是对参数值的大小进行限制。
void qsort(int q[], int l, int r)
{
if (l >= r) return ;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i ++; while (q[i] < x);
do j --; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
qsort(q, l, j);
qsort(q, j + 1, r);
}
def corr(X, K):
h, w = k.shape
H, W = X.shape
Y = torch.zeros((H - h + 1, W - w + 1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
Y[i, j] = (X[i:i+h, j:j+w] * K).sum()
return Y
class Covn2d(nn.module):
def __init__(self, kernel_size):
self.weight = nn.Parameter(torch.rand(kernel_size))
self.bias = nn.Parameter(torch.zeros(1))
def forword(self, x):
return corr(x, self.weight) + self.bias