Torch

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Torch
Логотип Torch
Тип бібліотека для машинного та глибокого навчання
Автор Ronan Collobert, Samy Bengio, Johnny Mariéthoz[1]
Перший випуск жовтень 2002; Помилка виразу: неочікуваний оператор < (2002-Помилка: неправильний час)[1]
Стабільний випуск 7.0 (27 лютого 2017; 7 років тому (2017-02-27)[2])
Операційна система Linux, Android, Mac OS X, iOS
Мова програмування Lua, LuaJIT, C, CUDA та C++
Ліцензія ліцензія BSD
Репозиторій github.com/torch/torch7
Вебсайт torch.ch

Torch — відкрита бібліотека для машинного навчання, система для наукових обчислень[en] та мова сценаріїв на основі мови програмування Lua[3]. Пропонує широкий спектр алгоритмів для глибокого навчання і використовує мову сценаріїв LuaJIT та реалізацію мовою C в основі. Станом на 2018 рік, Torch більше не перебуває в активній розробці.[4] Проте, станом на серпень 2019 року активно розроблюють PyTorch.[5]

torch[ред. | ред. код]

Центральним пакетом Torch є torch. Він забезпечує гнучкий N-вимірний масив, або тензор, який підтримує основні процедури для індексування[ru], розшаровування[en], транспозиції, приведення типів, зміни розмірів, розподілення зберігання, та клонування. Цей об'єкт використовується більшістю інших пакетів, і відтак є центральним об'єктом бібліотеки. Тензор також підтримує математичні операції, такі як max, min, sum, статистичні розподіли, такі як рівномірний, нормальний та поліноміальний, та операції основних підпрограм лінійної алгебри, такі як скалярний добуток, матрично-векторне множення, матрично-матричне множення, матрично-векторний скалярний добуток та матричний скалярний добуток.

Наступне ілюструє використання torch в REPL-інтерпретаторі:

> a = torch.randn(3,4)

> =a
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
-1.0434  2.2291  1.0525  0.8465
[torch.DoubleTensor of dimension 3x4]

> a[1][2]
-0.34010116549482
	
> a:narrow(1,1,2)
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
[torch.DoubleTensor of dimension 2x4]

> a:index(1, torch.LongTensor{1,2})
-0.2381 -0.3401 -1.7844 -0.2615
 0.1411  1.6249  0.1708  0.8299
[torch.DoubleTensor of dimension 2x4]

> a:min()
-1.7844365427828

Пакет torch також спрощує об'єктно-орієнтоване програмування та упослідовлювання, пропонуючи різні допоміжні функції, які використовуються в його пакетах. Функцію torch.class(classname, parentclass) можливо використовувати для створення фабрик об'єктів (класів). При виклику конструктора torch ініціалізує та встановлює таблицю Lua з визначеною користувачем метатаблицею, яка робить цю таблицю об'єктом.

Об'єкти, створювані фабрикою torch, можливо також упослідовлювати, за умови, що вони не містять посилань на об'єкти, які не може бути упослідовлено, такі як співпрограми Lua та userdata Lua. Проте userdata може бути упослідовлено, якщо їх обгорнуто таблицею (або метатаблицею), яка забезпечує методи read() та write().

nn[ред. | ред. код]

Пакет nn застосовують для побудови нейронних мереж. Його розділено на модульні об'єкти, які мають спільний інтерфейс Module. Модулі мають методи forward() і backward(), які дозволяють їм виконувати пряме та зворотне поширення відповідно. Модулі можливо з'єднувати, застосовуючи модулеві компонувальники, такі як Sequential, Parallel і Concat, щоби створювати складні, підігнані під задачу графи. Простіші модулі, такі як Linear, Tanh і Max, складають модулі основних складових. Цей модульний інтерфейс забезпечує автоматичне диференціювання градієнтів першого порядку. Нижче наведено приклад побудови багатошарового перцептрону із застосуванням модулів:

> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 входових, 25 прихованих вузлів
> mlp:add( nn.Tanh() ) -- якась передавальна функція у вигляді гіперболічного тангенсу
> mlp:add( nn.Linear(25, 1) ) -- 1 вихід
> =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]

Функції втрат реалізовано як підкласи класу Criterion, що має інтерфейс, подібний до Module. Він також має методи forward() і backward() для обчислення втрат і зворотного поширення градієнтів відповідно. Критерії є корисними для тренування нейронної мережі на класичних задачах. Уживаними критеріями є критерій середньоквадратичної похибки, реалізований в MSECriterion, та перехресно-ентропійний критерій, реалізований в ClassNLLCriterion. Нижче наведено приклад функції Lua, яку можливо викликати ітеративно для тренування модуля mlp на входовому тензорі x і цільовому тензорі y зі скалярним темпом навчання learningRate:

function gradUpdate(mlp,x,y,learningRate)
  local criterion = nn.ClassNLLCriterion()
  pred = mlp:forward(x)
  local err = criterion:forward(pred, y); 
  mlp:zeroGradParameters();
  local t = criterion:backward(pred, y);
  mlp:backward(x, t);
  mlp:updateParameters(learningRate);
end

Він також має клас StochasticGradient для тренування нейронної мережі методом стохастичного градієнту, хоча пакет optim забезпечує набагато більше можливостей в цьому відношенні, таких як регуляризація зникання моменту та градієнту.

Інші пакети[ред. | ред. код]

З Torch використовують багато інших пакетів, крім зазначених вище офіційних. Їх перелічено в шпаргалці torch.[6] Ці додаткові пакети забезпечують широкий спектр зручностей, таких як паралелізм, асинхронне введення/виведення, обробка зображень тощо. Їх можливо встановлювати за допомогою LuaRocks[en], пакетного менеджера Lua, який також включено до дистрибутиву Torch.

Застосування[ред. | ред. код]

Torch використовують Група дослідження ШІ компанії Facebook,[7] IBM,[8] Яндекс[9] і Дослідницький інститут Ідіап[en].[10] Torch було розширено для використання під Android[11] та iOS.[12] Його використовували для побудови апаратних реалізацій потоків даних, подібних тим, що в нейронних мережах.[13]

Facebook випустила набір модулів розширення як відкрите програмне забезпечення.[14]

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. а б Torch: a modular machine learning software library. 30 жовтня 2002 р. Архів оригіналу за 24 квітня 2014. Процитовано 24 квітня 2014 р.. (англ.)
  2. Collobert, Ronan. Torch7. GitHub. Архів оригіналу за 15 травня 2017. Процитовано 11 травня 2017. (англ.)
  3. Torch7: A Matlab-like Environment for Machine Learning (PDF). Neural Information Processing Systems. 2011. Архів оригіналу (PDF) за 6 березня 2016. Процитовано 11 травня 2017. (англ.)
  4. Torch GitHub repository ReadMe [Архівовано 24 липня 2017 у Wayback Machine.] (англ.)
  5. PyTorch GitHub repository [Архівовано 11 листопада 2019 у Wayback Machine.] (англ.)
  6. Cheatsheet · torch/torch7 Wiki. Архів оригіналу за 18 квітня 2017. Процитовано 11 травня 2017. (англ.)
  7. KDnuggets Interview with Yann LeCun, Deep Learning Expert, Director of Facebook AI Lab [Архівовано 30 березня 2017 у Wayback Machine.] (англ.)
  8. Hacker News [Архівовано 1 грудня 2017 у Wayback Machine.] (англ.)
  9. Yann Lecun's Facebook Page (англ.)
  10. IDIAP Research Institute : Torch [Архівовано 13 вересня 2016 у Wayback Machine.] (англ.)
  11. Torch-android GitHub repository [Архівовано 22 квітня 2017 у Wayback Machine.] (англ.)
  12. Torch-ios GitHub repository [Архівовано 20 серпня 2017 у Wayback Machine.] (англ.)
  13. NeuFlow: A Runtime Reconfigurable Dataflow Processor for Vision [Архівовано 5 травня 2017 у Wayback Machine.] (англ.)
  14. Facebook Open-Sources a Trove of AI Tools. Wired. 16 січня 2015. Архів оригіналу за 20 травня 2017. Процитовано 11 травня 2017. (англ.)

Посилання[ред. | ред. код]