Bästa svaret
ReLU definieras som f (x) = max (0, x). Softplus är dess differentiella surrogat och definieras som f (x) = ln (1 + e ^ x).
Både ReLU och Softplus är i stort sett lika, utom nära 0 där softplus är lockande smidig och differentierbar. Det är mycket enklare och effektivare att beräkna ReLU och dess derivat än för softplus-funktionen som har log (.) Och exp (.) I sin formulering. Intressant är att derivatet av softplus-funktionen är den logistiska funktionen: f ”(x) = \ frac {1} {1 + e ^ {- x}}.
Vid djupinlärning beräknas aktiveringsfunktionen och dess derivat är lika frekvent som addition och subtraktion i aritmetik. Genom att byta till ReLU går framåt- och bakåtpasseringar mycket snabbare samtidigt som den icke-linjära karaktären hos aktiveringsfunktionen som krävs för att djupa neurala nätverk ska vara användbar.
Svar
Hela poängen med en aktiveringsfunktion är att vara icke-linjär.
Låt mig förklara varför. Om du har ett nätverk med flera lager (så kallat ”djupt” mot ett ”grunt” nätverk) kan din modell potentiellt lära sig att upptäcka eller hantera mycket mer sofistikerade exempel. När du använder ditt nätverk skulle du använda fler sammankopplingar mellan vikter (och troligen fler vikter). När du gör beräkningarna betyder mycket av det faktiskt att multiplicera och lägga till tal tillsammans, som:
y = f (W x + b).
med f (\ cdot) som någon aktiveringsfunktion.
När du ”kaskaderar” lagren blir utdata från varje lager en inmatning till nästa. För två lager till exempel:
y = x\_2 = f (W\_2 x\_1 + b\_2) = f (W\_2 f (W\_1 x\_0 + b\_1) + b\_2).
Om f (\ cdot) var en linjär funktion f (x) = \ alpha x + \ beta då skulle hela nätverket ”kollapsa” till bara ett lager nätverk, helt enkelt för att det någon linjär kombination av linjära funktioner är en linjär funktion i sig.
Ekvationen ovan skulle återges:
x\_2 = \ alpha (W\_2 (\ alpha (W\_1 x\_0 + b\_1) + \ beta) + b\_2) + \ beta = \ alpha ^ 2 W\_1 W\_2 x\_0 + \ alpha ^ 2 W\_1 W\_2 b\_1 + \ alpha ^ 2 W\_2 \ beta + \ alpha W\_2 b\_1 + \ beta = \ alpha ”x\_0 + \ beta ”.
Detta är precis som om du hade ett enda lager nätverk med lite olika vikter.
Nu introducerar ReLU icke-linjäritet, vilket innebär att ovanstående uttalande inte längre gäller, så optimizer måste ”försöka hårdare” för att verkligen träna vikten och få allt att fungera. Det finns naturligtvis även andra icke-linjära funktioner (t.ex. sigmoid, tanh, etc.), men hela poängen är att de måste vara icke-linjära.
Slutligen är exemplet som just skrivits baserat på ett enkelt tätt anslutet nätverk, men jag antar att det också omfattar andra fall.