BÀI TẬP LỚN NHẬP MÔN HỌC MÁY VÀ KHAI PHÁ DỮ LIỆU DỰ ĐOÁN BỨC XẠ MẶT TRỜI GHI (GLOBAL HORIZONTAL IRRADIANCE) MỤC LỤC DANH SÁCH HÌNH ẢNH....................................................................................... 2 DANH SÁCH BẢNG BIỂU..................................................................................... 3 PHÂN CÔNG CÔNG VIỆC..................................................................................... 4 I. Giới thiệu và mô tả bài toán................................................................................ 5 1. Đặt vấn đề ........................................................................................................ 5 2. Bài toán dự đoán bức xạ mặt trời..................................................................... 5 II. Data set............................................................................................................. 6 III. Thuật toán LSTM (Long Short Term Memory) .............................................. 6 1. Mạng hồi quy RNN.......................................................................................... 6 1.1. Mạng RNN..........................................................................................................6 1.2. Các vấn đề của RNN...........................................................................................8 2. Mạng LSTM (Long short term memory)......................................................... 8 2.1. Ý tưởng cốt lõi ....................................................................................................9 2.2. Bên trong của LSTM ........................................................................................11 IV. Thực nghiệm và đánh giá............................................................................... 12 1. Sử dụng Linear Regression............................................................................ 13 2. Sử dụng LSTM ............................................................................................... 14 2.1. Thay đổi tỷ lệ traintest.....................................................................................15 2.2. Thay đổi learning_rate .....................................................................................17 2.3. Thay đổi drop_out.............................................................................................19 2.4. Sử dụng thêm hàm kích hoạt ............................................................................20 3. So sánh Linear Regression và LSTM............................................................. 21 V. Kết luận.......................................................................................................... 22 VI. Tài liệu tham khảo ......................................................................................... 22 DANH SÁCH HÌ
Trang 1TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ────────
BÀI TẬP LỚN
NHẬP MÔN HỌC MÁY VÀ KHAI PHÁ DỮ LIỆU
DỰ ĐOÁN BỨC XẠ MẶT TRỜI GHI (GLOBAL HORIZONTAL IRRADIANCE)
Sinh viên thực hiện Mã sinh viên
Giảng viên hướng dẫn : PGS TS Thân Quang Khoát
Hà Nội, tháng 1 năm 2022
Trang 2P a g e 2
MỤC LỤC
DANH SÁCH HÌNH ẢNH 2
DANH SÁCH BẢNG BIỂU 3
PHÂN CÔNG CÔNG VIỆC 4
I Giới thiệu và mô tả bài toán 5
1 Đặt vấn đề 5
2 Bài toán dự đoán bức xạ mặt trời 5
II Data set 6
III Thuật toán LSTM (Long Short Term Memory) 6
1 Mạng hồi quy RNN 6
1.1 Mạng RNN 6
1.2 Các vấn đề của RNN 8
2 Mạng LSTM (Long short term memory) 8
2.1 Ý tưởng cốt lõi 9
2.2 Bên trong của LSTM 11
IV Thực nghiệm và đánh giá 12
1 Sử dụng Linear Regression 13
2 Sử dụng LSTM 14
2.1 Thay đổi tỷ lệ train/test 15
2.2 Thay đổi learning_rate 17
2.3 Thay đổi drop_out 19
2.4 Sử dụng thêm hàm kích hoạt 20
3 So sánh Linear Regression và LSTM 21
V Kết luận 22
VI Tài liệu tham khảo 22
DANH SÁCH HÌNH ẢNH Hình 1: Cánh đồng pin mặt trời 5
Hình 2: Cấu trúc một RNN 7
Hình 3: Cấu trúc mở rộng của mạng RNN 7
Hình 4: Chuỗi lặp trong một RNN chứa 1 cổng 9
Trang 3P a g e 3
Hình 5: Chuỗi lặp trong một LSTM chứa 4 tầng 9
Hình 6: Hình minh họa trạng thái tế vào trong LSTM 10
Hình 7: Hình minh họa một cổng trong mạng LSTM 10
Hình 8: Hình minh họa cổng quên f 11
Hình 9: Hình minh họa cổng vào I 11
Hình 10: Hình minh họa tế vào LSTM cập nhật trái thái 12
Hình 11: Hình minh họa cổng output trong LSTM 12
Hình 12: Hàm MSE 12
Hình 13: Hàm RMSE 13
Hình 14: Dữ liệu ở dạng dataframe 13
Hình 15: Sử dụng mô hình Linear Regression 13
Hình 16: Kết quả khi sử dụng mô hình Linear Regression 14
Hình 17: Kết quả dự đoán với tỉ lệ train/test = 70:30 15
Hình 18: RMSE với tỉ lệ train/test = 70:30 15
Hình 19: Kết quả dự đoán với tỉ lệ train/test = 75:25 16
Hình 20: RMSE với tỉ lệ train/test = 75:25 16
Hình 21: Kết quả dự đoán với tỉ lệ train/test = 60:40 17
Hình 22: RMSE với tỉ lệ train/test = 60:40 17
Hình 23: Kết quả dự đoán với learning_rate = 0.0001 18
Hình 24: Kết quả dự đoán với learning_rate = 0.00001 18
Hình 25: Kết quả dự đoán với drop_out= 0.001 19
Hình 26: Kết quả dự đoán với drop_out= 0.05 19
Hình 27: Kết quả dự đoán với hàm kích hoạt là hàm Relu 20
Hình 28: RMSE với hàm kích hoạt là hàm Relu 20
Hình 29: Kết quả dự đoán với hàm kích hoạt là hàm Tanh 21
Hình 30: RMSE với hàm kích hoạt là hàm Tanh 21
Hình 31: Kết quả dự đoán trong một ngày 22
DANH SÁCH BẢNG BIỂU Bảng 1: Bảng so sánh RMSE khi thay đổi tỷ lệ train/test 17
Trang 4P a g e 4
PHÂN CÔNG CÔNG VIỆC
Nhiệm vụ Người tham gia Thời điểm
bắt đầu
Thời điểm kết thúc
Tìm dữ liệu Nguyễn Minh Đức
Trang 5và không phụ thuộc vào các nguồn tài nguyên không tái tạo
Hình 1: Cánh đồng pin mặt trời
Tuy nhiên, năng lượng mặt trời chưa được sử dụng nhiều vì sự thay đổi của thời tiết dẫn đến sự không chắc chắn về lượng năng lượng sẽ được tạo ra Do quá trình sản xuất năng lượng mặt trời không thể kiểm soát và không liên tục nên việc
dự đoán chính xác về quy trình này là rất quan trọng đối với cả nhà điều hành lưới điện và các công ty cung cấp điện mặt trời Đơn vị vận hành lưới điện chịu trách nhiệm lập kế hoạch cung - cầu để cân bằng cung và cầu; do đó, dự đoán chính xác về sản xuất điện mặt trời là rất quan trọng để tránh sự dao động trong
sự thay đổi hoặc gián đoạn nguồn cung cấp bằng cách thiết lập kế hoạch phát điện trước sử dụng dữ liệu dự đoán Do đó, hiểu biết trước về điện năng được sản xuất đóng một vai trò quan trọng trong việc duy trì chất lượng dịch vụ và tiết kiệm các tổn thất phát sinh
2 Bài toán dự đoán bức xạ mặt trời
Bài toán dự đoán bức xạ mặt trời là bài toán hồi quy, đầu ra mong muốn sẽ là chuỗi dự đoán bức xạ mặt trời dựa trên những yếu tố phụ thuộc trước đó là điều kiện thời tiết như nhiệt độ, tốc độ gió, lượng mưa, …
Trang 6P a g e 6
Ý tưởng :
- Thu thập dữ liệu thời tiết của các vùng và xử lý dữ liệu
II Data set
• Dữ liệu huấn luyện cho bài toán được thu thập tại: ENERYDATA.INFO
• Data set gồm các trường dữ liệu về:
o Bức xạ ngang của mặt trời (Global Horizontal Irradiance - GHI)
o Nhiệt độ trung bình (oC)
o Tốc độ gió trung bình (m/s)
• Data set của bài toán được thu thập từ 24/09/2017 đến 22/09/2019 theo từng phút tại 5 trạm quan trắc tại Việt Nam cung cấp 1.048.574 bản ghi dữ liệu
III Thuật toán LSTM (Long Short Term Memory)
1 Mạng hồi quy RNN
Một người bình thường không suy nghĩ các vấn đề ngay từ đầu, giống như sự hiểu biết về một bộ phim, người đó phải xem bộ phim từ đầu thì mới hiểu được những phân cảnh hiện tại đang diễn ra đang làm cho cái gì và tại sao có những cảnh đó Hay nói cách khác là người ấy phải suy nghĩ thông suốt liên tục
Tuy nhiên, mạng neural thông thường thì không thể làm được như thế, chúng cho tất cả dữ liệu vào 1 lúc dẫn đến việc có thể hiểu sai về ngữ nghĩa Vì vậy cần
có một giải pháp để xử lí những vẫn đề này Và mạng RNN (Recurrent Neural Network) được sử dụng cho những vấn đề này
Cấu trúc của 1 mạng RNN:
Trang 7P a g e 7
Hình 2: Cấu trúc một RNN
- Xt là dữ liệu đầu vào
- Ht là trạng thái đầu ra tại thời điểm t Cấu trúc tuần hoàn trong mạng cho phép
trạng thái tại một thời điểm nhất định được truyền sang thời điểm tiếp theo
- RNN là một mạng chung được tạo thành từ nhiều bản sao và xếp chồng lên nhau Mỗi mạng sẽ di chuyển đầu ra của nó cho mạng tiếp theo
Dưới đây là hình ảnh cấu trúc mạng mở rộng
Hình 3: Cấu trúc mở rộng của mạng RNN
Từ cấu trúc chuỗi của RNN, có thể hiểu đơn giản là nó liên quan đến thông tin trình tự Cấu trúc này dường như được sinh ra để giải quyết các vấn đề liên quan đến trình tự
Trang 8P a g e 8
a) Phải thực hiện tuần tự: vì cấu trúc RNN được sinh ra để giải quyết các vấn đề liên quan đến trình tự, nên các dữ liệu cũng phải được đưa vào theo trình tự cho nên không thể tận dụng được khả năng tính toán song song của máy tính b) Vấn đề lớn tiếp theo đó chính là bị mất mát thông tin xa Nguyên nhân là do
đạo hàm bị triệt tiêu vì hàm kích hoạt chúng ta dùng ở mỗi step là hàm tanh (hoặc sigmoid), đầu ra sẽ nằm trong đoạn [-1, 1] (hoặc [0, 1]) cho nên đạo
hàm của nó sẽ bị đóng trong khoảng [0, 1] (hoặc [0, 0.25])
Khi tính toán lan truyền ngược, phải cộng tất cả các đầu ra ở các bước trước
đó để tính đạo hàm Vấn đề ở đây là đạo hàm của hàm tanh hoặc sigmoid đều có
đạo hàm bằng 0 tại 2 đầu, mà khi đạo hàm bằng 0 thì nút mạng tương ứng sẽ bị bão hòa Nên với các giá trị nhỏ trong ma trận, khi thực hiện phép nhân ma trận, các đạo hàm tương ứng sẽ xảy ra mất mát, tức đạo hàm bị triệt tiêu sau vài bước nhân Như vậy thì các bước ở xa sẽ không còn tác dụng với nút ở hiện tại nữa
Đó là nguyên nhân làm cho RNN khó để học được các phụ thuộc xa
Có thể lấy ví dụ đơn giản như câu: “Trên trời nhiều mây đen, hình như trời sắp mưa” thì ta chỉ cần nói đến “Trên trời nhiều mây đên, hình như trời” thì ta có thể dự đoán được ngay là trời “sắp mưa” Trong trường hợp này, khoảng cách tới thông tin có được cần để dự đoán là nhỏ nên RNN hoàn toàn có thể học được Tuy nhiên, với trường hợp phải dùng nhiều ngữ nghĩa hơn để hiểu ví dụ như:
“Tôi là sinh viên trường đại học Bách Khoa Hà Nội, … Tôi thí nghiệm vật lý ở tòa nhà D3” Ta có thể thấy các thông tin gần của “Tôi thí nghiệm vật lý ở ” thì chúng ta chỉ biết đăng sau đó là tên 1 phòng hay tòa nhà nào đó Còn không thể biết được đó là tòa nào Muốn biết thì ta phải thêm thông tin là “Tôi là sinh viên trường đại học Bách Khoa Hà Nội” thì mới biết được thông tin là tòa nhà D3 Như vậy có thể thấy khoảng cách giữa các thông tin đã rất xa rồi
c) Một vấn đề khác nữa đó chính là bùng nổ đạo hàm, vấn đề này xảy ra khi giá trị của các ma trận là lớn (lớn hơn 1) Tuy nhiên việc này có thể dễ kiểm soát hơn và ngăn chặn được còn mất mát đạo hàm thì rất khó
Để giải quyết vấn đề mất mát đạo hàm của RNN, đã có một biến thể khác của RNN ra đời, đó là LSTM (long short term memory)
2 Mạng LSTM (Long short term memory)
Mạng bộ nhớ dài ngắn (Long short term memory network), thường được gọi
là LSTM – là một dạng đặc biệt của RNN có khả năng học được các phụ thuộc
xa LSTM lần đầu được giới thiệu bởi Hochreiter & Schmidhuber (1997), và sau
Trang 9P a g e 9
đó được các chuyên gia trong ngành cải tiến Chúng hoạt động cực kỳ hiệu quả
và được sử dụng rộng rãi trong các bài toán hiện nay
LSTM được thiết kế để tránh được vấn đề phụ thuộc xa (long-term dependency) Việc nhớ thông tin trong suốt thời gian dài là đặc tính mặc định của chúng, chứ không cần phải huấn luyện nó để có thể nhớ được Tức là ngay nội tại của nó đã có thể ghi nhớ được mà không cần bất kì can thiệp nào
Cấu trúc của 1 mạng RNN khá đơn giản, nó chỉ bao gồm 1 hàm tanh.
Hình 4: Chuỗi lặp trong một RNN chứa 1 cổng
Còn kiến trúc của LSTM thì cũng có dạng chuỗi như vậy tuy nhiên thì cấu trúc các module bên trong thì nó lại khác Thay vì chỉ có 1 tầng mạng neural, chúng có đến 4 tầng mạng neural tương tác với nhau rất đặc biệt
Hình 5: Chuỗi lặp trong một LSTM chứa 4 tầng
2.1 Ý tưởng cốt lõi
Chìa khóa của LSTM chính là các trạng thái tế bào – chính là đường chạy ngang thông qua các step ở phía trên sơ đồ
Trang 10P a g e 10
Trạng thái tế bào chạy xuyên suốt tất cả các mắt xích (các nút mạng) và chỉ tương tác tuyến tính đôi chút vì vậy mà các thông tin có thể xuyên suốt mà không
bị thay đổi
Hình 6: Hình minh họa trạng thái tế vào trong LSTM
LSTM có khả năng lọc bỏ các thông tin không quan trọng hoặc thêm các thông tin cần thiết ở các cổng Chúng đều được thực hiên ở các cổng
Các cổng là nơi sàng lọc các thông tin đi qua nó, chúng kết hợp bởi 1 tầng
sigmoid và một phép nhân
Hình 7: Hình minh họa một cổng trong mạng LSTM
Tầng sigmoid sẽ cho đầu ra trong đoạn từ [0, 1], mô tả các thông tin được
thông qua 0 có nghĩa là không thông tin nào được đi qua nó và 1 có nghĩa là tất
cả các thông tin có thể đi qua
Một LSTM đều có 3 cổng như vậy để duy trì và điều hành trạng thái của tế bào
Trang 11P a g e 11
2.2 Bên trong của LSTM
a) Cổng quên f : Bước đầu tiên chính là xem nhưng thông tin nào cần bị bỏ đi từ
trạng thái của tế bào Quyết định này được đưa ra bởi cổng quên Nó sẽ lấy
đầu vào là Ht – 1 và Xt rồi cho ra kết quả là một số trong đoạn từ [0, 1] cho mỗi số trong trạng thái tế bào Ct – 1 Đầu ra là 1 thể hiện rằng nó giữ toàn bộ
thông tin lại, còn 0 chỉ rằng toàn bộ thông tin sẽ bị bỏ đi
Hình 8: Hình minh họa cổng quên f
b) Cổng vào i: bước tiếp theo, cần xem những thông tin mới nào cần được đưa vào trạng thái tế bào Việc này gồm 2 phần, đầu tiên là sử dụng 1 tầng sigmoid
(cổng vào) để quyết định xem giá trị nào ta sẽ cập nhật Tiếp theo đó là 1 hàm
tanh để tạo ra vector cho giá trị mới Ct nhằm thêm vào cho trạng thái Trong
bước tiếp theo đó thì ta sẽ kết hợp 2 giá trị đó lại để tạo một cập nhật cho trạng thái
Hình 9: Hình minh họa cổng vào I
c) Tiếp theo là lúc cập nhật trạng thái tế bào cũ Ct – 1 thành tế bào mới Ct Ta sẽ nhân trạng thái cũ với ft để bỏ đi những thông tin quyết định quên lúc trước Sau
đó cộng thêm it∗Ct~ Trạng thái mơi thu được này phụ thuộc vào việc quyết định
cập nhập mỗi giá trị trạng thái ra sao
Trang 12P a g e 12
Hình 10: Hình minh họa tế vào LSTM cập nhật trái thái
d) Cuối cùng là Cổng output, ở đây sẽ quyết định đầu ra là gì Giá trị đầu ra sẽ được đưa vào trạng thái tế bào tuy nhiên nó vẫn sẽ được sàng lọc Đầu tiên,
cần dùng 1 hàm sigmoid để quyết định xem những thông tin nào sẽ được đưa
ra Sau đó đưa trạng thái tế bào qua 1 hàm tanh và nhân nó với đầu ra của cổng sigmoid để có được đầu ra mong muốn
Hình 11: Hình minh họa cổng output trong LSTM
Nếu để ý thì có thể thấy RNN là một dạng đặc biệt của LSTM Nếu thay giá trị của đầu ra của input gate là 1 và forget gate là 0 thì ta được RNN thuần
IV Thực nghiệm và đánh giá
- Hàm MSE:
Hình 12: Hàm MSE
- Hàm RMSE:
Trang 13Sử dụng thư viện model Linear Regression trong thư viện sklearn để dự đoán
Bộ dữ liệu gồm 3 trường là “GHI”, “Temp”, “WindSpeed”
Hình 14: Dữ liệu ở dạng dataframe
Chia tập dữ liệu thành 2 phần train và test, phần train là 800000 dòng đầu tiên
của bộ dữ liệu và phần test là phần còn lại cùng với đó là khai báo model Linear Regression
Hình 15: Sử dụng mô hình Linear Regression
Sau khi huấn luyện thì đưa ra dự đoán Nhóm sử dụng phương pháp đánh giá
lỗi là RMSE và đây là kết quả :
Trang 14P a g e 14
Hình 16: Kết quả khi sử dụng mô hình Linear Regression
Có thể thấy RMSE khá lớn 7256.889 cho nên mô hình Linear Regression
chưa thực sự chính xác trong việc dự đoán Nguyên nhân là do trong tập train,
trường “GHI” có nhiều giá trị 0 vì là ban đêm nên dẫn đến kết quả dự đoán bị sai
lệch nhiều
2 Sử dụng LSTM
Vì dữ liệu có dạng TimeSeries cho nên nhóm quyết định sử dụng thuật toán
LSTM cho bài toán
Ở đây chúng em đánh giá bằng validation và RMSE
Vì bộ dữ liệu khá lớn gồm hơn 1 triệu bản ghi cho nên nhóm chúng em đã thử chia tập train và test theo các tỷ lệ khác nhau đó là 70:30, 75:25, 60:40 để tiến hành huấn luyện
Trong model LSTM, chúng em sử dụng hàm loss là mse, vì mse có đạo hàm của w cho nên nhóm sử dụng trình tối ưu hóa adam Trình tối ưu hóa adam là một
trình tối ưu của thư viện tensorflow là một phương pháp giảm đạo hàm phù hợp
với hàm lỗi MSE
Vì dữ liệu theo từng phút và dự đoán theo từng ngày nên sẽ để batch_size là
1440 và huấn luyện trên 40 epochs
loss ở đây là loss của tập train, và val_loss là loss của validation, ở đây
validation nhóm lấy là tập test
Trang 15P a g e 15
2.1 Thay đổi tỷ lệ train/test
2.1.1 Tỷ lệ 70:30
Hình 17: Kết quả dự đoán với tỉ lệ train/test = 70:30
Hình 18: RMSE với tỉ lệ train/test = 70:30
Nhìn vào đồ thị giữa loss và validation loss ta có thể thấy ở trong những epoch đầu, mạng học khá tốt tuy nhiên về sau thì val_loss giảm nhẹ hơn Cả loss
và val_loss đều khá thấp (loss = 0.0025, val_loss = 0.0020) RMSE cũng cho kết
quả khá thấp là 64.560 Có thể đánh giá mạng huấn luyện với tỷ lệ train/test là 70:30 cho kết quả khá tốt
Trang 16P a g e 16
2.1.2 Tỷ lệ 75:25
Hình 19: Kết quả dự đoán với tỉ lệ train/test = 75:25
Hình 20: RMSE với tỉ lệ train/test = 75:25
Nhìn vào đồ thị giữa loss và validation loss ta có thể thấy, mạng học khá tốt
ở những epoch đầu nhưng đường val_loss thì đi ngang hơn so với tỷ lệ 70:30 Ở những epoch cuối, loss có vẻ thấp hơn so với val_loss tuy nhiên nó vẫn khá nhỏ
(0.0024) cho nên vẫn có thể chấp nhận được RMSE là 71.269 cho thấy mạng
huấn luyện với tỷ lệ 75:25 học khá tốt nhưng không tốt bằng 70:30
Trang 17P a g e 17
2.1.3 Tỷ lệ 60:40
Hình 21: Kết quả dự đoán với tỉ lệ train/test = 60:40
Hình 22: RMSE với tỉ lệ train/test = 60:40
Ta có thể thấy đồ thị khá giống với tỷ lệ 75:25 nhưng loss cao hơn val_loss
cũng gần như đi ngang ở phần sau cho thấy mạng đang quá phù hợp (overfit) với
dữ liệu RMSE ở khoảng 64.988 là khá thấp Mạng huấn luyện khá tốt với tỷ lệ
tập dữ liệu train/test là 60:40
Bảng 1: Bảng so sánh RMSE khi thay đổi tỷ lệ train/test
Tỷ lệ 70:30 75:25 60:40
RMSE 64.560 71.269 64.988
2.2 Thay đổi learning_rate
Ở trong phần huấn luyện các mạng ở trên, nhóm sử dụng leaning rate là 0.00015 Đối với learning rate, nếu tốc độ học quá nhanh sẽ có thể dẫn tới việc
bị bùng nổ đạo hàm Còn nếu quá thấp thì dẫn đến mạng sẽ học quá chậm Nên
sau nhiều lần điều chỉnh tham số learning rate thì learning rate ở 0.00015 là phù
hợp nhất
2.2.1 Tỷ lệ 0.0001