Giới thiệu về JOONE

Một phần của tài liệu Mạng nơron nhân tạo và ứng dụng (Trang 45 - 62)

Xuất phát từ ý tưởng xây dựng một framework để tạo ra một cách tiếp cận mới trong việc ứng dụng mạng nơron nhân tạo. Tác giả Paolo Marrone đã và đang phát triển JOONE - Java Object

Oriented Neural Engine - một bộ máy thiết kế, đào tạo và ứng dụng mạng nơron nhân tạo xây dựng trên ngôn ngữ lập trình hướng đối

tượng Java. Đây là một dự án phần mềm mở của cộng đồng mã nguồn mở

SourceForce do Paolo Marrone đứng đầu.

JOONE là một bộ Java framework để xây dựng và chạy các ứng dụng trí tuệ nhân tạo dựa trên mạng nơron. Các ứng dụng của JOONE có thể được xây dựng

trên một máy đơn, được đào tạo trên môi trường phân tán và chạy trên bất kỳ thiết bị nào (thiết bị cầm tay, máy tính để bàn...).

Tất cả các thành phần (components) của JOONE đều được thiết kế theo các tiêu chí: tính thống nhất, tính đa luồng (multithreading), tính tham số (parameterization), tính chia đoạn (serialization). Tất cả các tiêu chí này nhằm đảm bảo sự ổn định, sự mở rộng và cuối cùng đạt đến những đặc tính chuẩn của ngành

trí tuệ nhân tạo.

Các ứng dụng trên JOONE được xây dựng dựa trên các thành phần (components) dễ dàng kết nối, thuận tiện sử dụng và ổn định. Các thành phần này có thể được phát triển lên và cũng có thể sử dụng chúng bởi các chuyên gia trí tuệ

nhân tạo để thiết kế ra các mạng nơron thích ứng.

Trên thực tế vẫn tồn tại vấn đề lớn cần giải quyết đó là cần tìm ra một mạng nơron phù hợp nhất cho một vấn đề cụ thể mà không bị rơi vào các cực tiểu địa

phương (local minima) và cuối cùng cần tìm ra một kiến trúc mạng tốt nhất. JOONE có thể đơn giản hoá việc khởi tạo mạng lúc ban đầu và đào tạo một mạng

được thiết kế theo phương thức có chỉ đạo hoặc không chỉ đạo.

JOONE còn là một bộ máy có khả năng dễ dàng đào tạo một cách phân tán và

dễ dàng sử dụng từ xa bởi những người sử dụng. Đây là một ý tưởng lớn đang được các lập trình viên tham gia vào dự án nguồn mở này đang thực thi. Có thể lấy một ví dụ như một công ty bảo hiểm đang đào tạo một mạng nơron nhân tạo về vấn đề ước lượng rủi ro theo các trường hợp đã xảy ra, đồng thời nó có khả năng truy cập từ xa để lấy các thông tin dự báo từ các thiết bị không dây như điện thoại di động, PDA

để sử dụng nó. Điều đó là hoàn toàn có thể khi công nghệ Java hoàn toàn hỗ trợ lập trình không dây (mobile computing and wireless computing) và JOONE được thiết kế trên nền Java, được thiết kế gọn nhẹ, theo module để có thể thực hiện ý tưởng đó.

I.19. Cấu trúc bên trong của JOONE[7]

I.19.1. Khái niệm cơ bản

Một mạng nơron nhân tạo (neural network) được xây dựng từ các lớp nơron (layers), chúng được kết nối với nhau bởi các khớp thần kinh (synapses). Tuỳ thuộc vào sự kết nối này thỡ cú một số loại kiến trúc mạng được hình thành như: mạng

tiến, mạng hồi tiếp ....

Trong phần này chúng ta chỉ quan tâm đến mạng truyền tiến (Feed Forward

Neural Network – FFNN), các loại mạng khác sẽ tương tự được thiết kế. Trong mạng tiến mỗi lớp có chứa một số lượng nơron, trong đó các nơron cú cựng đặc

tính về hàm truyền(transfer function) hằng số học (learning rate)... Mạng nơron được thành lập từ các lớp nơron này, không bắt buộc chúng phải đồng nhất cùng loại.

Mô hình kết nối giữa các nơron.

Mỗi lớp xử lý các tín hiệu vào của nó, áp dụng hàm truyền và gửi tín hiệu đã xử lý ra thông qua các dây thần kinh đầu ra đến các lớp kế tiếp. Cứ như vậy mạng nơron có thể xử lý một vectơ nhận từ lớp vào, xử lý rồi chuyển tín hiệu ra ở lớp cuối.

I.19.2. Quy tắc truyền tín hiệu

Để đảm bảo chắc chắn bất kỳ kiến trúc mạng nơron nào được yêu cầu cũng có thể được thiết kế trên JOONE, các phương thức truyền tín hiệu trên mạng nơron đảm bảo thông suốt, liên tục, và tiến hành xử lý song song, không cần đến sự điều khiển tập trung. Mỗi lớp nơron xây dựng thừa kế từ Interface Runnable của Java, vì vậy mỗi lớp nơron là một luồng xử lý riêng độc lập với các lớp nơron khác. Những tuần tự xử lý của một lớp bao gồm: nhận tín hiệu vào, áp dụng hàm truyền cho tín hiệu nhận được, và chuyển tín hiệu đó ra các khớp thần kinh ra. Các lớp tiếp nhận được tín hiệu có tín hiệu chuyển đến sẽ bắt đầu xử lý và cứ tiếp tục như vậy, xử lý cho đến lớp cuối cùng. Tiến trình xử lý này được mô tả theo hình sau:

Mô hình xử lý tín hiệu trên một lớp nơron.

Trong đó mỗi nơron N có những thông số sau:

XN : Tín hiệu vào của nơron = (I1 * WN1) + (I2 * WN2) + .... + (Ip * WNp)

YN : Tín hiệu ra từ nơron = f(XN) (adsbygoogle = window.adsbygoogle || []).push({});

F(X) : Hàm truyền tuỳ thuộc vào loại của nơron.

Quy tắc truyền tín hiệu đồng thời được sử dụng trong mạng lan truyền ngược

sai số từ lớp ra cho đến lớp vào trong giai đoạn học của mạng, nó cho phép các

trọng số và ngưỡng của mỗi nơron được thay đổi theo một thuật toán học cụ thể.

Sơ đồ dữ liệu truyền trong mạng nơron lan truyền ngược sai số.

Tóm lại, mỗi lớp nơron có hai nhiệm vụ, một là xử lý tín hiệu từ đầu vào chuyển sang đầu ra và xử lý các tín hiệu lỗi được truyền ngược từ đầu ra ngược về đầu vào. Để đạt được mục tiêu này mỗi một lớp nơron có hai quy tắc truyền tín hiệu ngược nhau, một trong quá trình truyền tin thuận, một trong quá trình học để điều chỉnh các trọng số và ngưỡng (weight and bias), chúng được mô tả trong hình 23.

Các thành phần của JOONE (bao gồm cả các lớp nơron và khớp thần kinh) phải được xây dựng trước các quy tắc truyền tín hiệu này để điều chỉnh các trọng số

và ngưỡng của các nơron cho phù hợp trong quá trình học.

Chúng được đảm bảo trên nguyên tắc mỗi lớp nơron chạy trên một luồng xử lý độc lập của nó, đây là các thành phần hoạt động duy nhất trong bộ máy chính của

Mô hình mạng nơron truyền tiến trong JOONE.

Như vậy để xây dựng một mạng nơron chỉ đơn thuần là kết nối các lớp với nhau thông qua khớp thần kinh theo yêu cầu và các lớp sẽ chạy theo quy tắc trên. Nhận xét về đặc tính của JOONE mang lại như sau:

Bộ máy linh hoạt: chúng ta có thể xây dựng mạng bằng cách đơn giản kết nối các lớp nơron với nhau bằng các khớp thần kinh mà không cần quan tâm các tín hiệu được xử lý như thế nào bên trong.

Bộ máy có tính mở rộng: Do các lớp nơron được xử lý bởi các luồng độc lập nên muốn bộ máy chạy nhanh chúng ta hóy thờm số CPU cho máy tính, mỗi luồng xử lý sẽ chạy trên mỗi CPU khác nhau, nâng cao hiệu quả tính toán.

Bộ máy gần với hiện thực: Trên lý thuyết chúng ta có thể nhận xét bộ máy hoàn toàn không xa với bộ não con người trong đó mỗi nơron hoạt động độc lập với các nơron khác.

I.19.3. Các loại lớp nơron của JOONE

Các lớp nơron là các thành phần của mạng nơron, chúng được thành lập từ các nơron cú cựng đặc tính. Thành phần này chuyển các tín hiệu vộctơ từ các khớp

thần kinh vào, áp dụng hàm chuyển và chuyển tín hiệu sang dây thần kinh ra. Lớp nơron được thể hiện qua lớp Layer trong Java và các dây thần kinh được thể hiện qua lớp Synapse. Các lớp nơron là các thành phần tự chủ trong mạng nơron, chỳng

cú cỏc luồng xử lý riêng và độc lập.

Các loại lớp nơron được mang cùng tên với loại nơron, chúng khác nhau bởi hàm truyền trong các nơron. Trong JOONE cú các loại lớp nơron được xây dựng sẵn, chúng ta hoàn toàn có thể phát triển thờm cỏc lớp nơron với các hàm truyền mới, sau đây là một số lớp nơron thường dùng:

v. Các loại lớp nơron của JOONE:

Tên lớp Hàm truyền Mô tả

Lớp tuyến tính

(Linear Layer)

y = β . x Là lớp đơn giản nhất, sử dụng hàm tuyến tính với hệ số β. Nếu β =1 thì tín hiệu đầu ra bằng tín hiệu vào nơron. Thường được sử dụng trong lớp vào.

Lớp Xích-ma

(Sigmoid Layer) y=1+ex

1 Lớp sử dụng hàm truyền sigmoid, thường được sử dụng trong lớp ẩn, biểu diễn rất tốt các hàm phi tuyến trong mạng nơron

nhân tạo. Lớp tang hyperbol (Tanh Layer) x x x x e e e e y −− + −

= Tương tự như lớp xích-ma, hàm truyền

tang hyperbol được áp dụng để hạn chế (adsbygoogle = window.adsbygoogle || []).push({});

ngưỡng ra trong khoảng từ -1 đến 1. Lớp Logarit (Logarithmic Layer)   < − ≥ + = 0 ) 1 log( 0 ) 1 log( x khi x x khi x y Lớp này áp dụng hàm truyền là hàm

logarit vì vậy giá trị ra không giống hai

hàm trên, nó nằm trong khoảng 0 đến +∞.

Lớp trễ

(Delay Layer)

YN = x(t-N)

với 0 < N < taps

I.19.4. Các loại khớp thần kinh của JOONE

Lớp Synapse trong Java biểu diễn các khớp thần kinh trong mạng nơron kết nối các lớp nơron với nhau, cho phép truyền các tín hiệu thuận chiều và ngược chiều giữa hai lớp nơron kế tiếp nhau trong mạng.

Trong JOONE các lớp Synapse đồng thời là các bộ nhớ của các mạng, chúng ghi nhớ lại các trọng số đối với từng khớp thần kinh kết nối với mỗi nơron. Các loại

lớp synapse khác nhau chính ở mô hình kết nối và từ đó có cấu trúc lưu trữ phù hợp.

Ngoài ra cũng cần chú ý, các khớp thần kinh là điểm kết nối giữa các lớp

nơron, giữa các luồng xử lý độc lập vì vậy đây cũng là nơi dùng chung các dữ liệu,

để tránh xảy ra xung đột khi các tiến trình xử lý khác nhau cần có những cơ chế đồng bộ hoá việc lấy thông tin ở các lớp này.

vi. Các loại khớp thần kinh thường dùng trong JOONE:

Loại Synapse Hình biểu diễn Mô tả

Nối trực tiếp

(Direct Synapse)

Kết nối một - một giữa các nơron của hai lớp

Hai lớp nơron phải cùng số nơron.

Nối hoàn toàn

(Full Synapse)

Kết hai nốt bất kỳ của hai lớp nơron với nhau. Đây là kiểu kết nối thường được sử dụng nhất.

Không bắt buộc cùng số nơron giữa hai lớp.

Nối Kohonen

(Kohonen Synapse)

Một loại kết nối đặc biệt được sử dụng trong việc xây dựng mạng nơron đào tạo không chỉ đạo.

Nối Sanger

(Sanger Synapse)

Được sử dụng trong mạng nơron đào tạo không chỉ đạo. (adsbygoogle = window.adsbygoogle || []).push({});

Nối làm trễ

(Delayed Synapse)

Có các kết nối giống kết nối hoàn toàn nhưng trên mỗi kết nối sử dụng một bộ làm trễ FIR.

I.19.5. Monitor : điểm điều khiển trung tâm của mạng nơron

Mạng nơron không thể thiếu một bộ phận trung tâm để điều khiển mọi tiến trình học, tiến trình xử lý của các lớp nơron cũng như các khớp thần kinh kết nối chúng. Đồng thời điểm điểu khiển trung tâm này cũng là nơi thay đổi các tham số phù hợp cho quá trình đào tạo và xử lý của mạng ví dụ như hằng số học, mụmen học, chu kỳ học....

Mỗi thành phần của mạng nơron (lớp nơron và khớp thần kinh kết nối) đều có chứa một tham chiếu đến đối tượng điều khiển duy nhất: Monitor. Chúng có thể lấy các thông tin về tham số của quá trình học cũng như trạng thái hoạt động từ đối tượng Monitor này. Hình sau biểu diễn quan hệ này:

Sự liên hệ giữa đối tượng Monitor và các lớp nơron.

Theo sự điều khiển của người dùng, có thể thay đổi các giá trị tham số của đối tượng Monitor và các thành phần khác trong mạng sẽ nhận sự thay đổi này để xử lý. Đồng thời Monitor cũng là nơi theo dõi và điều khiển mọi hoạt động của mạng nơron.

I.20. Tiến trình xử lý trong mạng nơron [7]

Chúng ta sẽ xem xét việc quản lý các sự kiện bên trong mạng khi đạt đến lần đào tạo cuối cùng trong mạng nơron:

Mô hình mạng nơron đặc trưng được thiết kế trong JOONE.

Giả sử rằng chúng ta đang có một mạng nơron được cấu thành từ các thành phần được mô tả trên hình vẽ, gồm ba lớp: một lớp vào, một lớp ẩn và một lớp ra; InputSynapse để đọc các dữ liệu học, TeacherSynapse dùng để tính lỗi phát sinh sau một chu trình lan truyền qua mạng. Một đối tượng Monitor để điều khiển toàn bộ tiến trình học của mạng. Như đã nêu trên, tất cả các đối tượng đều có tham chiếu đến đối tượng Monitor để lấy thông tin và trạng thái của mạng.

Theo tuần tự của nhón trờn hình vẽ chúng ta thấy tiến trình học của mạng được xử lý như sau:

Tiến trình xử lý trong mạng nơron (1)

1. Lớp nơron vào gọi phương thức fwdGet() của đối tượng InputSynapse.

2. Đối tượng InputSynapse sẽ gọi phương thức nextStep() của đối tượng Monitor để hỏi sự cho phép tiếp tục một chu kỳ mới hay không.

Tiến trình xử lý trong mạng nơron (2)

3. Đối tượng Monitor sẽ phát sinh một sự kiện netStopped() (để các đối tượng ngoài biết trạng thái).

4. Đối tượng Monitor trả về giá trị false trong hàm nextStep() cho biết kết thúc chu kỳ.

5. InputSynapse sẽ tạo ra một vộctơ đánh dấu kết thúc và chuyển vào lớp nơron vào. Vộctơ đánh dấu kết thúc chứa giá trị đếm thứ tự chu kỳ bằng-1.

Tiến trình xử lý trong mạng nơron (3)

6. Các lớp nơron khi nhận được vộctơ đánh dấu kết thúc này sẽ chuyển vộctơ này sang lớp nơron kế tiếp và đặt luồng xử lý của mình ở trạng thái dừng.

I.21. Biểu đồ lớp của JOONE

Nhân của JOONE được thành lập từ một số lượng nhỏ các Interface trong

Java, sau đây là một số lớp tiêu biểu để cấu thành nờn cỏc thành phần cơ bản trong

mạng nơron:

Tất cả các lớp đều thừa kế Interface java.io.Serializable, vì vậy các mạng

nơron khi thiết kế trên JOONE đều có thể ghi vào dữ liệu và có thể truyền qua mạng một cách dễ dàng. Hai thành phần cơ bản của nhân JOONE là lớp Layer và lớp Synapse.

I.21.1. Lớp ảo Layer

Một đối tượng Layer là một thành phần cơ bản hình thành nên một mạng (adsbygoogle = window.adsbygoogle || []).push({});

nơron nhân tạo. Nó được cấu thành từ các nơron cùng loại, nó biến đổi các tín hiệu

vào thành các tín hiệu ra bằng cách áp dụng hàm truyền (transfer function). Các tín hiệu ra sẽ được truyền qua đối tượng Synapse đã được kết nối với nó dưới dạng một vộctơ ra. Các đối tượng Layer có tính chủ động trong mạng, trong kỹ thuật chúng được thiết kế sử dụng một luồng xử lý riêng (thread) vỡ vậy nó có tính độc

lập so với các thành phần khác của mạng.

Lớp Layer được thiết kế thực thi Interface java.lang.Runnable. Phần trọng tâm của lớp là phương thức run():

Đoạn mã chính của lớp nơron Layer.

Luồng xử lý sẽ thực hiện liên tục cho đến khi biến running = false. Tiến trình xử lý gồm hai pha chính sau:

a. Pha lan truyền tiến

Mã nguồn trong khung thứ nhất, thể hiện các công việc cần thực hiện trên mỗi Layer trong pha lan truyền tiến. Tuần tự các bước thực thi như sau :

1. Chúng gọi hàm fireRevGet()để nhận tất cả các số liệu vào từ các lớp InputSynapse.

2. Sau khi nhận các số liệu vào chúng áp dụng hàm truyền trờn các số liệu thông qua việc gọi phương thức forward(inps). Phương thức forward() là một phương thức ảo sẽ được cài đặt ở các lớp thừa kế lớp Layer, nhiệm vụ chủ yếu là áp dụng hàm truyền trong quá trình lan truyền tiến. Các hàm truyền sẽ được cài đặt tuỳ theo loại lớp nơron.

3. Kế tiếp chúng truyền số liệu đã được xử lý sang lớp OuputSynapse kết nối với nó qua phương thức fireFwdPut()

Mô hình chi tiết xử lý tín hiệu trong lớp nơron Layer.

Các bước thực hiện được mô tả ở hình 32 trên.

b. Pha lan truyền ngược sai số

Sau pha lan truyền tiến, nếu mạng đang trong quá trình học thì luồng xử lý sẽ chuyển sang pha lan truyền ngược sai số. Các bước xử lý như sau:

1. Thực hiện lấy tín hiệu truyền ngược từ các OutputSynapse bằng việc thực hiện gọi phương thức fireRevGet().

2. Xử lý cập nhật lại trọng số, ngưỡng (bias) qua phương thức backward().

Cũng như phương thức forward(), phương thức backward() là một phương thức ảo. Sẽ được cài đặt bởi các lớp thừa kế sau.

Một phần của tài liệu Mạng nơron nhân tạo và ứng dụng (Trang 45 - 62)