多层感知机

https://zh.d2l.ai/chapter_multilayer-perceptrons/mlp.html

讨论题的第四问在说什么?(怎么少于20字的还不让发)

小批量套用非线性 可能会造成 过拟合 不稳定 梯度爆炸等等

你好,请问从数学的角度该如何力激活函数呢?除了使得函数非线性之外,有什么其它直觉上的考虑吗?

如果没有激活函数,无论嵌套多少层,输出始终可以表示为输入的线性组合。这使得拟合一些非线性函数是不可能的。

def heaviside_step(s):
    return 1 if s >= 0 else 0

def perceptron(X, W, b):
    s = np.dot(X, W) + b
    y = heaviside_step(s)
    return y

def NOT_perceptron(x):
    w = -1
    b = 0.5
    return perceptron(x, w, b)

def AND_perceptron(X):
    W = np.array([1, 1])
    b = -1.5
    return perceptron(X, W, b)

def OR_perceptron(X):
    W = np.array([1, 1])
    b = -0.5
    return perceptron(X, W, b)

def NOR_perceptron(X):
    W = np.array([-1, -1])
    b = 0.5
    return perceptron(X, W, b)

例如上文中给出的 Perceptron,我们可以通过单层感知器分类如 ANDOR 这样的逻辑门,但是无论我们将权重和偏移设置为多少,我们都不能正确分类 XOR。因此,我们希望通过组合多个单层感知器来得到 XOR,如下所示:

def XOR_1(X):
    """ a XOR b = (a AND b) NOR (a NOR b)"""
    AND = AND_perceptron(X)
    NOR = NOR_perceptron(X)
    OUT = NOR_perceptron(np.array([AND, NOR]))
    return OUT

def XOR_2(X):
    """ a XOR b = (a OR b) AND NOT(a AND b)"""
    OR = OR_perceptron(X)
    NOT_AND = NOT_perceptron(AND_perceptron(X))
    OUT = AND_perceptron(np.array([OR, NOT_AND]))
    return OUT

def XOR_3(X):
    """ a XOR b = (a AND (NOT b)) OR ((NOT a) AND b)"""
    a_AND_NOT_b = AND_perceptron(np.array([X[0], NOT_perceptron(X[1])]))
    NOT_a_AND_b = AND_perceptron(np.array([NOT_perceptron(X[0]), X[1]]))
    OUT = OR_perceptron(np.array([a_AND_NOT_b, NOT_a_AND_b]))
    return OUT

下一层的输入是上一层经过激活函数后的输出。直觉上考量,并不是所有函数都是线性的。正如 XOR 中,我们不能通过一条线分类以下四个点:(0,0)=F, (0,1)=T, (1,0)=T, (1,1)=F。

1 Like