Torch (học máy)

Torch là một thư viện học máy mã nguồn mở, một framework tính toán khoa học và là một ngôn ngữ kịch bản dựa trên ngôn ngữ lập trình Lua. Nó cung cấp một lượng lớn các thuật toán về học sâu, sử dụng ngôn ngữ kịch bản LuaJIT và ngôn ngữ thực thi C được tạo ra tại IDIAP ở EPFL. Từ năm 2018, Torch không còn được phát triển nữa. Tuy vậy, PyTorch - vốn dựa trên thư viện Torch, thì đang được phát triển từ tháng 10 năm 2022.
torch.
Gói cốt lõi của Torch là codice_1. Nó cung cấp một mảng hay tensor n chiều một cách linh hoạt, hỗ trợ các quy trình cơ bản để index, chuyển vị, truyền, thay đổi kích thước, chia sẻ kho lưu trữ và tạo bản sao (cloning). Tensor cũng hỗ trợ các phép toán như codice_2, codice_3, codice_4; phân phối thống kê như phân phối đều, phân phối chuẩn và phân phối đa thức; các phép toán BLAS như tích vô hướng, phép nhân ma trận với vector, phép nhân 2 ma trận.
Ví dụ sau đây sử dụng torch thông qua trình biên dịch REPL:
&gt; a = torch.randn(3,4)
&gt; =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]
&gt; a[1][2]
-0.34010116549482
&gt; 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]
&gt; 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]
&gt; a:min()
-1.7844365427828 
Gói codice_1 cũng đơn giản hóa việc lập trình hướng đối tượng và tuần tự hóa bằng cách cung cấp các chức năng tiện lợi khác nhau. Hàm codice_6 có thể sử dụng để tạo (lớp) factory method. Khi hàm tạo được gọi, torch khởi tạo và lập một table dạng Lua với metatable do người dùng định nghĩa qua đó table đó trở thành một đối tượng.
Các đối tượng sử dụng torch factory cũng được tuần tự hóa, miễn là chúng không chứa tham chiếu đến các đối tượng không thể tuần tự hóa, như các coroutine dạng Lua và "userdata" dạng Lua. Tuy nhiên, "userdata" có thể tuần tự hóa nếu nằm trong một kiểu table (hay metatable) cung cấp các phương thức codice_7 và codice_8.
nn.
Gói codice_9 được sử dụng để xây dựng các mạng neuron. Nó được chia thành các đối tượng module dùng chung một codice_10 giao diện chung. Các module có phương thức codice_11 và codice_12 cho phép chúng truyền thẳng (feedforward) và truyền ngược (backpropagate) tương ứng. Các module có thể được nối với nhau bằng cách sử dụng module hợp tử, như codice_13, codice_14 và codice_15 để tạo các biểu đồ phức tạp phù hợp. Các module đơn giản như codice_16, codice_17 và codice_18 tạo thành các module có các thành phần cơ bản. Giao diện module này cung cấp phép vi phân gradient tự động. Sau đây là một ví dụ về trường hợp sử dụng để xây dựng một tri giác đa lớp (MLP) bằng cách sử dụng module:
&gt; mlp = nn.Sequential()
&gt; mlp:add( nn.Linear(10, 25) ) -- 10 input, 25 unit ẩn
&gt; mlp:add( nn.Tanh() ) -- một số hàm truyền tiếp tuyến hyperbol
&gt; mlp:add( nn.Linear(25, 1) ) -- 1 output
&gt; =mlp:forward(torch.randn(10))
-0.1815
[torch.Tensor of dimension 1]
Các hàm mất mát được thực thi như các lớp con của codice_19, có giao diện tương tự như codice_10. Nó cũng có phương thức codice_11 và codice_12 để tính toán gradient mất mát và truyền ngược. Hữu ích để đào tạo mạng neuron đối với các yêu cầu không cao cấp. Các mất mát thường được tính qua Sai số toàn phương trung bình (MSE) thực thi trong codice_23 và entropy chéo thực thi trong codice_24. Dưới đây là một ví dụ về hàm Lua gọi ra để huấn luyện một module codice_25 khi input tensor codice_26, tensor mục tiêu codice_27 với một biến vô hướng codice_28: 
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
Ngoài ra, nó cũng có lớp codice_29 để đào tạo một mạng neuron bằng cách sử dụng thuật Giảm gradient ngẫu nhiên, mặc dù gói codice_30 cung cấp nhiều lựa chọn hơn, như động lượng và phân rã trọng lượng chính quy hóa.
Các gói khác.
Nhiều gói khác với các gói đã nêu ở trên được Torch cung cấp. Chúng được liệt kê trong cheetsheet của torch. Các gói bổ sung này cung cấp một loạt các tiện ích như tính song song, đầu vào/đầu ra không đồng bộ, xử lý ảnh, v.v. Dùng LuaRocks để cài đặt, trình quản lý gói Lua cũng được bao gồm trong Torch.
Ứng dụng.
Torch được sử dụng bởi Nhóm nghiên cứu AI của Facebook, IBM, Yandex và Viện nghiên cứu Idiap. Torch cho phép sử dụng rộng rãi trên Android và iOS. Nó được sử dụng để tạo nên các phương pháp thực thi phần cứng cho luồng dữ liệu giống như mạng neuron.
Facebook đã phát hành một bộ module mở rộng dưới dạng phần mềm mã nguồn mở.