You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何最简神经网络性能不及Logistic回归?

新手神经网络训练困境:无法完成简单二分类任务

训练数据生成

使用以下代码生成线性可分的二分类训练数据,包含1024个样本、2个有效特征,无冗余特征:

X, y = make_classification(n_samples=1024,n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=2)

手动实现的神经网络代码

import numpy as np
from sklearn.datasets import make_classification

def f(x):
  return 1/(1+np.exp(-x))

def df(x):
  return f(x)*(1-f(x))

def init():
  np.random.seed(42)
  W1 = np.random.rand(2,2)
  W2 = np.random.rand(1,2)
  return W1,W2

def go_forward(inp,W1,W2):
  sum = np.dot(W1,inp)
  out = np.array([f(x) for x in sum])

  sum_1 = np.dot(W2,out)
  out_1 = f(sum_1)
  y  = 1 if out_1>0.5 else 0 
  return (y,out)

def train_one_epoch(X_train,y_train,W2,W1,lr):
  err = []
  for k in range(len(X_train)):
    ind = np.random.randint(0,len(X_train))
    x,y = X_train[ind],y_train[ind]
    pred, out = go_forward(x,W1,W2)
    e = pred - y
    delta = e*df(pred)
    W2 = W2 - lr*delta*out

    delta2  = W2*delta*df(out)
    W1 = W1 - np.array(x)*delta2*lr
    err.append(e)
  return W1,W2,np.mean(np.array(err))


epoch = 100
lr = 0.01
err = []
W1,W2 = init()
for e in range(epoch):
  W1,W2,e = train_one_epoch(X_train,y_train,W2,W1,lr)
  err.append(e)

训练结果问题

  • 误差表现:训练误差曲线无明显下降趋势,收敛效果极差
  • 准确率对比:
    • 手动实现网络:0.751953125
    • sklearn逻辑回归模型:0.974609375
  • 分类结果差异:测试数据呈现清晰的可分边界,手动网络的分类边界混乱,无法有效区分样本;逻辑回归模型则能精准划分两类样本

疑问

明明是简单的线性可分二分类任务,手动实现的神经网络却无法有效解决,调整训练轮数(epoch)也没有改善,问题出在哪里?

内容的提问来源于stack exchange,提问作者Berezin_Daniil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:40:52