吴恩达教授的深度学习课程第一门课《神经网络和深度学习》的第二周内容,主要聚焦于神经网络的基础数学原理和编程实现。这一部分作为整个系列课程的基石,为后续更复杂的神经网络结构学习奠定了重要基础。
第二周的核心内容包括:
提示:这部分内容虽然基础,但理解深度直接影响后续课程的学习效果。建议投入足够时间确保每个概念都真正掌握。
二元分类是深度学习中最基础的问题类型。给定输入特征x,预测输出y属于0或1类别。课程中采用猫咪图片识别作为示例:
数学表示为:
code复制给定{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}, 其中x∈R^n, y∈{0,1}
逻辑回归是处理二元分类的经典算法,其核心是sigmoid函数:
python复制import numpy as np
def sigmoid(z):
return 1/(1+np.exp(-z))
参数更新公式推导:
梯度下降的参数更新过程:
python复制# 参数初始化
w = np.zeros((dim,1))
b = 0
# 迭代更新
for i in range(num_iterations):
# 前向传播计算预测值
A = sigmoid(np.dot(X.T,w)+b)
# 计算梯度
dw = (1/m)*np.dot(X,(A-Y).T)
db = (1/m)*np.sum(A-Y)
# 参数更新
w = w - learning_rate*dw
b = b - learning_rate*db
非向量化实现(效率低):
python复制z = 0
for i in range(n_x):
z += w[i]*x[i]
z += b
向量化实现(推荐):
python复制z = np.dot(w.T,x) + b
实测对比:在特征维度n_x=10^6时,向量化实现速度提升约300倍。
标准化输入特征的两种常用方法:
python复制X = (X - np.min(X))/(np.max(X)-np.min(X))
python复制X = (X - np.mean(X))/np.std(X)
学习率选择经验值参考:
| 学习率 | 收敛速度 | 震荡情况 | 适用场景 |
|---|---|---|---|
| 0.01 | 快 | 轻微 | 推荐初始值 |
| 0.001 | 中等 | 无 | 精细调优 |
| 0.1 | 极快 | 严重 | 需配合衰减 |
当使用较大学习率时可能出现损失值不降反升的情况:
python复制def gradient_check(theta, epsilon=1e-7):
gradapprox = (J(theta+epsilon)-J(theta-epsilon))/(2*epsilon)
diff = np.linalg.norm(grad - gradapprox)/(np.linalg.norm(grad)+np.linalg.norm(gradapprox))
return diff
即使在这个基础模型中也可能出现过拟合:
python复制# 成本函数添加正则项
J += (lambda_/2*m)*np.sum(w**2)
# 梯度计算相应变化
dw += (lambda_/m)*w
虽然本周只涉及二元分类,但可以通过以下方式扩展:
python复制def softmax(z):
exp_z = np.exp(z - np.max(z))
return exp_z / exp_z.sum(axis=0)
python复制learning_rate = initial_lr / (1 + decay_rate * epoch_num)
python复制v_dw = beta*v_dw + (1-beta)*dw
w = w - learning_rate*v_dw
在真实项目中应用这些基础技术时:
数据质量检查清单:
模型评估指标:
部署注意事项:
我在实际教学和项目指导中发现,很多学员在第二周容易忽视基础概念的深入理解,急于进入神经网络结构的学习。但根据经验,这一周的内容掌握程度直接影响后续课程的学习效果。建议至少投入10-15小时进行充分练习,确保每个公式都能独立推导,每个代码块都能不参考讲义实现。