讨论题的第四问在说什么?(怎么少于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,我们可以通过单层感知器分类如 AND
和 OR
这样的逻辑门,但是无论我们将权重和偏移设置为多少,我们都不能正确分类 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