感知机,逻辑回归,或者说单层神经网络只能解决线性可分的问题,比如AND和OR问题,图中的直线是决策边界。
image.png
对于XOR问题,由于线性不可分,我们希望生成非线性的决策边界,如图
image.png我们可以通过组合多个线性可分的决策边界,来实现这一目的
image.png
在神经网络中,这个操作就是增加隐藏层
image.png
相当于将原始的输入通过隐藏层之后,转化为了一个更有效的表达
image.png
使用keras简单实现一下吧
import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense
# the four different states of the XOR gate
training_data = np.array([[0,0],[0,1],[1,0],[1,1]], "float32")
# the four expected results in the same order
target_data = np.array([[0],[1],[1],[0]], "float32")
model = Sequential()
model.add(Dense(2, input_dim=2, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['binary_accuracy'])
model.fit(training_data, target_data, nb_epoch=500, verbose=2)
print model.predict(training_data).round()
提供一个纯numpy实现:https://github.com/omar-florez/scratch_mlp
中文翻译:https://zhuanlan.zhihu.com/p/74631214
网友评论