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à torch. 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ư max, min, sum; 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:
> 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
> a12
-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
Gói torch 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 torch.class(classname, parentclass) 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 read() và write().

**nn**
Gói nn đượ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 Module giao diện chung. Các module có phương thức forward() và backward() 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ư Sequential, Parallel và Concat để tạo các biểu đồ phức tạp phù hợp. Các module đơn giản như Linear, Tanh và Max 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:
> mlp = nn.Sequential()
> mlp:add( nn.Linear(10, 25) ) -- 10 input, 25 unit ẩn
> mlp:add( nn.Tanh() ) -- một số hàm truyền tiếp tuyến hyperbol
> mlp:add( nn.Linear(25, 1) ) -- 1 output
> =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 Criterion, có giao diện tương tự như Module. Nó cũng có phương thức forward() và backward() để 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 MSECriterion và entropy chéo thực thi trong ClassNLLCriterion. Dưới đây là một ví dụ về hàm Lua gọi ra để huấn luyện một module mlp khi input tensor x, tensor mục tiêu y với một biến vô hướng 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
Ngoài ra, nó cũng có lớp StochasticGradient để đà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 optim 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ở.

**Xem thêm**
 So sánh các phần mềm học sâu- PyTorch

**Tham khảo**

**Liên kết ngoài**
Thể loại:Phần mềm học sâu
Thể loại:Phần mềm thống kê miễn phí
Thể loại:Phần mềm Lua (ngôn ngữ lập trình)
Thể loại:Phần mềm sử dụng giấy phép BSD