ReLU(Rectified Linear Units)
ReLU强大的原因之一就是可以完美地线性划分异或问题(异或的重要性不用多提,在数电逻辑实现和许多决策或加密算法中都是基础)(还有一个重要原因时ReLU可以解决多层网络梯度消失的问题)
异或的数据空间表示出来如图
当运算量相同时(1,1)(0,0),结果为0;当运算量不同时(1,0)(0,1),结果为1
如上图中不同颜色点代表不同的情况
显然无法线性划分两种情况(一条线将相同属性划分到相同区域)
而通过ReLU可将异或的数据空间变化到如下图
其中橘色点代表异或值为1的情况,蓝色点代表异或值为0的情况,显然此时可以清晰地进行划分
具体实现过程:
(能看到这的人一定是了解神经网络的,其实结果已经呼之欲出了,就是需要求出权重W和偏置b)
设
输入为包含异或信息的矩阵(包含了异或的所有情况)
进行运算
得到结果
再利用ReLU进行激活
可以看到X映射到了out,X中异或取值为1的对应项全映射到了(1,0),异或取值为0的对应项分别映射到了(2,1)和(0,0)
就是之前看见的图了
Python实现:
import numpy as np
X = np.array(
[
[1,0],
[0,1],
[1,1],
[0,0]
]
)
W=np.array(
[
[1,1],
[1,1]
]
)
b=np.array(
[
[0,-1]
]
)
def affine_forward(X ,W ,b):
N = X.shape[0]
x_new = X.reshape(N,-1)
out = np.dot(x_new ,W)+b
#print(out)
out = np.maximum(out,0)
cache = (X ,W ,b)
return out,cache
out=affine_forward(X,W,b)[0]
print(out)