/avatar.jpg

Lec5-Automatic Differentiation Implementation

Auto Differentiation Implementation Basic Knowledge OOP in Python class call method 在Python中,__call__方法是一个特殊的方法,它允许一个类的实例表现得像一个函数。当你定义了一个类,并在该类中实现了__call__方法,你就可以通过直接调用实例来执行这个方法,就像调用一个函数一样。 这里是一个简单的例子来说明__call__方法的用法: 1 2 3 4 5 6 7 8 9 10 11 12 class Greeter: def __init__(self, name): self.name = name def __call__(self): return f"Hello, {self.name}!" # 创建Greeter类的实例 greeter = Greeter("Kimi") # 调用实例,就像它是一个函数 print(greeter()) # 输出: Hello, Kimi! 在这个例子中,Greeter类有一个__init__方法来初始化实例,还有一个__call__方法来定义当实例被调用时应该执行的操作。当我们创建了一个Greeter的实例并调用它时,实际上是调用了__call__方法,它返回了一个问候语。 __call__方法通常用于创建可调用的对象,这在某些设计模式中非常有用,比如工厂模式、单例模式等。此外,它也常用于装饰器中,允许装饰器返回的对象能够被调用。 new method 在Python中,__new__方法是一个特殊的静态方法,用于创建一个类的新实例。它是在__init__方法之前被调用的,并且是创建对象实例的第一个步骤。__new__方法主要负责创建一个对象,而__init__方法则用于初始化这个对象。 __new__方法通常用于以下情况: 继承不可变类型:比如元组、字符串等,它们是不可变的,不能使用__init__进行初始化,因为它们在创建时就已经完成了初始化。在这种情况下,可以通过重写__new__方法来创建新的实例。 控制实例的创建:在某些情况下,你可能想要控制对象的创建过程,比如单例模式,或者在创建对象时进行一些特殊的处理。 继承自内置类型:当你想要继承自Python的内置类型时,你需要重写__new__方法来创建实例,因为内置类型通常不提供__init__方法。 __new__方法的基本语法如下: 1 2 3 4 5 6 class MyClass(metaclass=type): def __new__(cls, *args, **kwargs): # 创建实例的代码 instance = super(MyClass, cls).

Lec4-Automatic Differentiation

Automatic Differentiation 数值微分 希望误差阶数为 $O(h^2)$ 事实上并非采取这种方式计算,只是用来test side note: $\delta^T$ : pick a small vector $\delta$ from unit ball $\nabla_{x} f(x)$ : gradient of $f(x)$ at $x$, 通常是其他方法计算的 右手边则是数值计算,然后看两者是否近似相等 符号微分 许多重复的的计算与IO,但是可以作为自动微分的引入 自动微分 计算图 有向无环图(DAG),点包含数值,边表示运算 前向模式 Forward Mode AD 算法 遍历图,从输入开始,计算每个节点的输出,然后将结果传播到后续节点 $$ \Large \begin{aligned} Define: & \quad v’_{1i} = \frac{\partial v_i}{\partial x_1} \ \end{aligned} $$ then compute $v_i’$ iteratively, in the forward topological order 限制 如果n小k大,那么跑很少的pass就可以得到想要的梯度,但是事实上情况相反 反向模式 Reverse Mode AD 算法 遍历图,从输出开始,计算每个节点的输入,然后将结果传播到前续节点

Lec3-Manual Neural Networks Backprop

Manual Neural Network I 回顾一下通用近似定理 注意事实上多项式、Nearest Neighbor等都是基于通用近似定理的。 非线性ReLU函数新理解 画图折线 反向传播 no one else can do this awful math happily 😀 so here comes the backpropagation algorithm & autograd 潜在的模块化和自动求导🤔