Ця відповідь стосується загальної сторони функцій витрат, не пов’язаних із TensorFlow, і в основному стосуватиметься частин вашого питання "деякі пояснення щодо цієї теми".
У більшості прикладів / навчальних посібників, за якими я слідував, використовувана функція витрат була дещо довільною. Сенс полягав у тому, щоб ознайомити читача з конкретним методом, а не з функцією витрат конкретно. Це не повинно зупиняти вас слідувати навчальному посібнику, щоб ознайомитись з інструментами, але моя відповідь повинна допомогти вам вибрати, як вибрати функцію витрат для власних проблем.
Якщо ви хочете отримати відповіді щодо перехресної ентропії, Logit, норм L2 чи будь-чого конкретного, я раджу розмістити декілька більш конкретних питань. Це збільшить ймовірність того, що хтось із конкретними знаннями побачить ваше запитання.
Вибір правильної функції витрат для досягнення бажаного результату є критичним моментом проблем машинного навчання. Основний підхід, якщо ви не знаєте, що саме ви хочете отримати від свого методу, - це використовувати середню квадратичну помилку (Вікіпедія) для проблем регресії та відсоток помилок для класифікаційних проблем. Однак, якщо ви хочете отримати хороші результати від свого методу, вам потрібно визначити хороший і, таким чином, визначити адекватну функціональну вартість. Це походить як від знань про домен (які ваші дані, чого ви намагаєтеся досягти), так і знання інструментів, які є у вашому розпорядженні.
Я не вірю, що я можу провести вас через функції витрат, вже впроваджені в TensorFlow, оскільки я дуже мало знаю про цей інструмент, але можу навести приклад того, як писати та оцінювати різні функції витрат.
Для ілюстрації різних відмінностей між вартісними функціями скористаємося прикладом задачі бінарної класифікації, де ми хочемо для кожного зразка класу .xnf(xn)∈{0,1}
Починаючи з обчислювальних властивостей ; як дві функції, що вимірюють "те саме", можуть призвести до різних результатів. Візьміть наступну, просту функцію витрат; відсоток помилки. Якщо у вас зразків, - це передбачуваний клас, а справжній клас, ви хочете мінімізуватиNf(yn)yn
- 1N∑n{10 if f(xn)≠yn otherwise=∑nyn[1−f(xn)]+[1−yn]f(xn) .
Ця функція витрат має перевагу, що її легко інтерпретувати. Однак вона не гладка; якщо у вас є лише два зразки, функція "стрибає" з 0, до 0,5, до 1. Це призведе до невідповідностей, якщо ви спробуєте скористатися градієнтним спуском по цій функції. Одним із способів уникнути цього є зміна функції витрат на використання ймовірностей переуступки; . Функція стаєp(yn=1|xn)
- 1N∑nynp(yn=0|xn)+(1−yn)p(yn=1|xn) .
Ця функція плавніша, і вона буде працювати краще за допомогою градієнтного спуску. Ви отримаєте «більш тонку» модель. Однак у нього є інша проблема; якщо у вас є неоднозначний зразок, скажіть, що у вас недостатньо інформації, щоб сказати щось краще, ніж . Тоді використання градієнтного спуску на цій функції витрат призведе до появи моделі, яка максимально збільшує цю ймовірність і, таким чином, може бути перевиконання.p(yn=1|xn)=0.5
Ще одна проблема цієї функції полягає в тому, що якщо а , ви, певно, маєте рацію, але ви помиляєтесь. Щоб уникнути цього питання, ви можете взяти журнал ймовірності . Оскільки та , наступна функція не має проблеми, описаної в попередньому абзаці:p(yn=1|xn)=1yn=0logp(yn|xn)log(0)=∞log(1)=0
- 1N∑nynlogp(yn=0|xn)+(1−yn)logp(yn=1|xn) .
Це повинно ілюструвати, що для оптимізації одного і того ж , відсоток помилок, різні визначення можуть дати різні результати, якщо їх простіше обчислити.
Цілком можливо , для функції витрат і , щоб виміряти ту ж концепцію , але може привести ваш метод до кращих результатів , ніж .ABAB
Тепер давайте подивимось, як різні функції витрат можуть вимірювати різні поняття. У контексті пошуку інформації, як і в пошуку Google (якщо ми ігноруємо ранжирування), ми хочемо, щоб результати, що повертаються,
Зауважте, що якщо ваш алгоритм поверне все , він поверне кожен можливий результат і, таким чином, матиме високу згадуваність, але матиме дуже низьку точність. З іншого боку, якщо він повертає лише один елемент, той, який є найбільш певним, є релевантним, він матиме високу точність, але низький рівень виклику.
Для того, щоб судити про такі алгоритми, загальною функцією витрат є -score (Вікіпедія) . Поширений випадок - -score, який дає однакову вагу для точності та згадування, але загальний випадок - -score, і ви можете налаштувати щоб отриматиFF1Fββ
- Більше нагадуйте, якщо ви використовуєтеβ>1
- Більш висока точність, якщо ви використовуєте .β<1
У такому сценарії вибір функції вартості - це вибір компромісу за вашим алгоритмом .
Інший приклад, який часто доводиться, - це медичний діагноз, ви можете вибрати функцію витрат, яка карає більше помилкових негативів або помилкових позитивних даних, залежно від того, що є кращим:
- Більше здорових людей класифікують як хворих (Але тоді ми можемо лікувати здорових людей, що коштує дорого і може нашкодити їм, якщо вони насправді не хворі)
- Більше хворих класифікують як здорових (Але тоді вони можуть померти без лікування)
На закінчення, визначення функції витрат - це визначення мети вашого алгоритму. Алгоритм визначає, як дістатися.
Побічна примітка: Деякі функції витрат мають приємний алгоритм способів досягнення своїх цілей. Наприклад, існує хороший спосіб до мінімуму втрат шарніра (Вікіпедія) , вирішивши подвійну задачу в SVM (Wikipedia)