经典算法

梯度下降

深度学习中最基础的优化算法,通过计算梯度来更新模型参数。

时间复杂度: O(n) 空间复杂度: O(1)

反向传播

神经网络训练的核心算法,高效计算梯度并更新网络权重。

时间复杂度: O(n) 空间复杂度: O(n)

卷积操作

CNN中的核心操作,通过滑动窗口提取图像特征。

时间复杂度: O(H×W×K²) 空间复杂度: O(H×W)

注意力机制

Transformer架构的核心,计算序列中元素间的相关性。

时间复杂度: O(n²) 空间复杂度: O(n²)

代码实现

梯度下降算法实现 Python
import numpy as np

class GradientDescent:
    def __init__(self, learning_rate=0.01, max_iterations=1000):
        self.learning_rate = learning_rate
        self.max_iterations = max_iterations
        self.history = []
    
    def optimize(self, objective_function, gradient_function, initial_params):
        """
        梯度下降优化算法
        
        Args:
            objective_function: 目标函数
            gradient_function: 梯度函数
            initial_params: 初始参数
        
        Returns:
            优化后的参数
        """
        params = np.array(initial_params)
        
        for iteration in range(self.max_iterations):
            # 计算梯度
            gradient = gradient_function(params)
            
            # 更新参数
            params = params - self.learning_rate * gradient
            
            # 记录历史
            loss = objective_function(params)
            self.history.append(loss)
            
            # 检查收敛
            if len(self.history) > 1:
                if abs(self.history[-1] - self.history[-2]) < 1e-6:
                    break
        
        return params

# 使用示例
def objective_function(params):
    """简单的二次函数作为目标函数"""
    return params[0]**2 + params[1]**2

def gradient_function(params):
    """目标函数的梯度"""
    return np.array([2*params[0], 2*params[1]])

# 初始化优化器
optimizer = GradientDescent(learning_rate=0.1, max_iterations=100)

# 开始优化
initial_params = [1.0, 1.0]
optimal_params = optimizer.optimize(objective_function, gradient_function, initial_params)

print(f"最优参数: {optimal_params}")
print(f"最终损失: {objective_function(optimal_params)}")
卷积操作实现 Python
import numpy as np

def convolution_2d(image, kernel, stride=1, padding=0):
    """
    2D卷积操作实现
    
    Args:
        image: 输入图像 (H, W)
        kernel: 卷积核 (K, K)
        stride: 步长
        padding: 填充大小
    
    Returns:
        卷积结果
    """
    # 添加填充
    if padding > 0:
        image = np.pad(image, padding, mode='constant')
    
    # 获取尺寸
    H, W = image.shape
    K = kernel.shape[0]
    
    # 计算输出尺寸
    out_H = (H - K) // stride + 1
    out_W = (W - K) // stride + 1
    
    # 初始化输出
    output = np.zeros((out_H, out_W))
    
    # 执行卷积
    for i in range(out_H):
        for j in range(out_W):
            # 提取当前窗口
            window = image[i*stride:i*stride+K, j*stride:j*stride+K]
            # 计算卷积
            output[i, j] = np.sum(window * kernel)
    
    return output

# 使用示例
# 创建测试图像
image = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
])

# 创建卷积核(边缘检测)
kernel = np.array([
    [-1, -1, -1],
    [-1,  8, -1],
    [-1, -1, -1]
])

# 执行卷积
result = convolution_2d(image, kernel, stride=1, padding=1)
print("卷积结果:")
print(result)

算法复杂度

排序算法

快速排序、归并排序、堆排序等经典排序算法的实现和优化。

O(n log n)
平均时间
O(n)
空间

搜索算法

二分搜索、深度优先搜索、广度优先搜索等搜索策略。

O(log n)
二分搜索
O(V+E)
图搜索

动态规划

背包问题、最长公共子序列、编辑距离等经典DP问题。

O(n²)
典型时间
O(n²)
空间

最佳实践

应用示例

神经网络训练

使用梯度下降和反向传播训练深度学习模型。

图像处理

使用卷积操作进行图像滤波、边缘检测等处理。

自然语言处理

使用注意力机制进行文本分类、机器翻译等任务。

时间序列分析

使用滑动窗口和统计方法分析时序数据。