22.05.04 Stacked DCNN - N-CMAPSS Turbofan Engine RUL 예측

2022. 5. 5. 00:45카테고리 없음

사용했던 데이터 NCMAPSS와 CMAPSS 첨부합니다.

 

CMAPSS.zip
11.86MB

 

N-CMAPSS.zip
4.03MB

 

 

 

 

 

 

https://paperswithcode.com/paper/a-stacked-deep-convolutional-neural-network

 

Papers with Code - A stacked deep convolutional neural network to predict the remaining useful life of a turbofan engine

🏆 SOTA for Remaining Useful Lifetime Estimation on NASA C-MAPSS-2 (Score metric)

paperswithcode.com

첫 번째 DCNN은 정규화된 raw 데이터를 입력으로 사용하여 저차원 특징 벡터를 추출하는 데 사용됩니다. 

두 번째 DCNN은 이전 DCNN에서 가져온 벡터 목록을 수집하고 RUL을 추정합니다. 

 

  • Level 1 (encoding) has the goal to make a dimesion reduction and noise removal.

Level 1 인코딩 : 디멘션을 감소키기고 노이즈를 없앤다.

  • Level 2 (trending) has the goal the learn from the trend of the signal using the encodings generated by the level 1.

Level 2 트렌딩 : 인코딩을 이용해 레벨에 따라 생성된 신호의 경향을 학습한다.

 

논문

 

우리가 분석할 TurboFan의 모습과 각 위치에 배치되어있는 sensor들
표 1

2.1 사용한 데이터셋

도전에 제공된 데이터 세트는 90회의 시뮬레이션 비행(N-CMAPSS1(Arias Chao et al., 2021)에서 추출)의 데이터로 구성된다. 흐름 열화 또는 하위 구성 요소 효율과 관련된 7가지 고장 모드
각 비행에 존재하는 것이 정의되어 있다. 비행은 비행 기간에 따라 세 등급으로 나뉜다. 1등급은 지속시간이 1~3시간인 가을비행, 2등급은 3~5시간인 비행, 3등급은 5시간 이상 걸리는 비행이 포함된다. 각 비행은 상승, 순항 및 하강 운항을 포함하는 사이클로 나뉜다.

 

데이터셋 - NCMAPSS

C-MAPSS(상업 모듈식 에어로-추진 시스템 시뮬레이션) 동적 모델 [3]은 과거 [1]에서 열화 모델링에 사용되었다.
그러나 이 이전 연구에서 제공된 실패 대비 궤적은 순항 중 가능한 6개의 작동 스냅샷으로 제한된다. 또한 비정상적인 열화의 시작은 과거의 수술 프로파일에 의존하지 않는다. 따라서, 결과적인 열화 궤적은 실제 시스템에 존재하는 복잡성의 중요한 요소가 부족하다.
[4]에서는 동일한 CMAPSS 동적 모델을 사용하고 이러한 한계를 해결하기 위해 열화 모델링을 확장했다.
이 문서는 [5]에 사용된 시뮬레이션 데이터의 결과 데이터 세트 중 하나를 사용하여 데이터 세트의 사용을 제시한다.

 

CMAPSS 동적 모델은 사실적인 대형 상용 터보팬 엔진 시뮬레이션을 위한 고화질 컴퓨터 모델이다.
그림 1은 CMAPSS 문서 [3]에 사용된 해당 스테이션 번호와 함께 엔진의 개략적인 표현을 보여줍니다.
이 패키지에는 엔진 열역학 모델 외에도 (i) 해수면부터 40,000 피트까지의 고도, (ii) 0부터 0.90까지의 마하 수치에서 작동할 수 있는 대기 모델이 포함되어 있습니다.

 

우리는 CMAPSS 컴퓨터 모델의 수학적 추상화를 비선형 방정식의 결합된 시스템의 형태를 가진 시스템 모델이라고 부른다. 시스템 모델의 입력은 시나리오 설명자 작동 조건과 관찰 불가능한 모델 건강 매개 변수 α로 나뉜다.
시스템 모델의 출력은 상태 모니터링 신호의 일부가 아닌 측정된 물리적 특성 x^s 및 관찰되지 않은 특성 x^v의 추정치이다. 그 비선형 방정식은 다음과 같다.

표 2 ~ 4는 데이터 세트의 각 입력 변수의 이름, 설명 및 단위를 제공합니다. 변수 기호는 CMAPSS의 내부 변수 이름에 해당합니다. 설명 및 단위는 모델 설명서와 같이 보고됩니다.

 

 

- Data Overview - A Small Fleet of Turbofan Engines

문서화된 데이터 세트는 알려지지 않고 다른 초기 건강 조건을 가진 9개의 터보팬 엔진으로 구성된 작은 비행대의 합성 런투고(run-to-failure) 열화 궤적을 제공한다. 상용 제트 기내에서 기록된 실제 비행 조건은 C-MAPSS 모델[2]에 입력된 것으로 간주되었다.

그림 3 : 고도(altitude), flight Mach 번호, 스로틀-리졸버 각도(TRA) 및 팬 입구(T2)의 총 온도의 기록에 의해 제시된 모의 비행 엔벨로프의 커널 밀도 추정치. 9개 비행대 Units의 완전한 실패 궤적이 표시된다. N = 6개의 trainig units(u = 2, 5, 10, 16, 18 & 20)와 M = 3개의 test units(u = 11, 14 &)
15)를 나타냅니다. test units 11(파란색)은 training units와 작동 프로필이 유사합니다.

 

 

그림 3은 N = 6 training units(u = 2, 5, 10, 16, 18 & 20) 및 M = 3 test units(u = 11, 14, 15)에 대해 시나리오 변수 W: 고도(alt), 비행 마하 수(XM), 스로틀-레버 각도(TRA) 및 팬 입구(T2)의 총 온도(T2)에 의해 주어진 모의 비행 봉투의 커널 밀도 추정치를 보여준다. test units 14와 15는 training units와 유의하게 다른 작동 분포를 가지고 있다는 것을 주목할 필요가 있다. 구체적으로, test units 14와 15는 다른 장치들에 비해 더 짧고 더 낮은 고도 비행을 한다. 따라서 training units 세트에는 이 두 장치의 시험 조건에 대해 완전히 대표적이지 않은 비행 프로파일이 포함되어 있다.

 

사용 가능한 데이터 세트(D)에는 두 가지 고유한 고장 모드가 있다. Units 2, 5, 10는 비정상적인 고압 터빈(HPT) 효율 저하 고장 모드가 있습니다. Units 16, 18 및 20은 저압 터빈(LPT) 효율 및 고압 터빈(HPT) 효율 저하와 함께 흐름에 영향을 미치는 보다 복잡한 고장 모드에 노출됩니다.

 

Test units는 동일한 복합 고장 모드에 노출된다. 그림 6은 비행대(fleet)의 9개 Units에서 유도된 열화 프로파일을 보여준다. 각 Unit의 초기 열화는 다르고 엔진 간 변동성은 건강 지수의 10%에 해당합니다. 영향을 받는 시스템 구성 요소의 열화는 선형 정규 열화에 이어 더 가파른 비정상 열화를 수반하는 확률적 프로세스를 따른다. 각 구성 요소의 분해 속도는 비행대(fleet) 내에서 다릅니다.

 

 

Table 5 : 데이터의 샘플링 속도는 1Hz이므로 교육을 위한 5.3M 샘플과 테스트를 위한 120M 샘플의 데이터 세트 총 크기가 된다. test unit 14는 비행시간(0.16M초)이 가장 적은 짧은 비행엔진이지만 비행주기 수가 가장 많다는 점은 주목할 만하다.

Figure 5 : fleet의 각 unit에 대해 고압 터빈 효율(HPT_Eff_mod), 저압 터빈 효율(LPT_Eff_mod) 및 저압 터빈 흐름(LPT_flow_mod)에 대한 열화의 흔적. 각 장치의 비정상적인 열화(예: ts)의 시작은 점선 수직선으로 표시됩니다.

 

predictive model G that provides a reliable RUL estimate (Yˆ ) on a test dataset of M units DT⇤ = {Xsj ⇤}M j=1; where Xsj ⇤ = [x1 sj ⇤,...,x kj sj ⇤]

모델 G는 test dataset인 M의 Unit Dt에 대해 RUL 측정을 하기위한 모델이다.

RMSE와 NASA의 점수 측정 함수.

Figure 6. 고압 터빈 효율(HPT_Eff_mod), 저압 터빈 효율(LPT_Eff_mod) 및 저압 터빈 흐름(LPT_flow_mod)에 대한 열화의 흔적. 세 개의 Unit가 표시됩니다. Unit 11(파란색 삼각형), Unit 14(녹색 사각형) 및 Unit 15(오렌지색 원). 비정상적인 열화의 시작(즉, tsu)은 점선 수직선으로 표시됩니다.

 

 

 

2.2 문제정의

문제는 센서 출력 Xs, 시나리오 기술자 W 및 보조 데이터 A를 사용하여 시스템의 남은 유효 수명 Y를 예측할 수 있는 모델 G의 개발을 중심으로 전개된다. 시스템의 RUL을 추정하는 데 사용할 수 있는 다양한 변수는 표 1에 설명되어 있습니다. 전자는 다음 식과 같이 나타낼 수 있는 최적화 문제이다.

S는 점수측정 함수이고 Ns는 나사의 점수측정함수이다. 알파는 예측값<y이면 1/13, 크거나같으면 1/10을 사용.

M은 샘플의 갯수이다.

 

3.1 데이터 정규화

서로 다른 모형을 개발하는 데 사용되는 20개의 변수(표 1 참조)는 서로 다른 scale를 가집니다. 그러한 이유로, 제안된 네트워크에 그러한 데이터를 직접 공급하면 모델의 학습과 수렴이 느려진다. 따라서, 훈련 단계 전에, 변수를 공통 척도로 균질화하기 위해 데이터 정규화 단계가 필요하다.

보다 정확하게는 표준 정규화가 이 논문에서 사용된다.

(정규화 한다는 얘기)

평균과 분산은 각 훈련 교차 검증(cross-validation) 세트에 대해 계산되며 validation 세트를 정규화하는 데에도 사용된다.

 

3.3 Time window

데이터 정규화를 마치고 나면, 네트워크의 인풋은 time window를 정규화된 데이터를 sliding하며 생성된다. 

Lw = window의 크기 

네트워크의 인풋은 Xtk로 표현된다. (Figure2 참조)

Yt = 짝지어진 ground RUL label

 

이런 접근으로 각 유닛 Tk - Lw 샘플이 고려된다. 여기서 Tk는 각 장치의 총 실행 시간(초)이다.

 

용어 정리

 

초기에는 기계가 건강한 상태일 것이라 생각하여 실험 시작 시 일정한 규칙을 설정하는 것이 일반적이다(H. Li, Zhao, Zhang, Zio, 2020). 현재 우리 논문에서, 이러한 종류의 가정은 모델에 편견을 도입할 수 있기 때문에 이 접근법은 사용하지 않았다. 대신, ground-RUL 라벨은 각 단위 Ykt(=unit k 의 t시점일 때 RUL) = TULk - Ctk

(TULk = unit k의 total useful lifetime, Ctk = t시점에서 실험시작부터 과거의 cycle의 수)

의 RUL로부터 주기의 선형 함수로 설정되었다.

 

잠깐 time window가 무엇일까

https://dining-developer.tistory.com/29

 

시계열 예측을 지도 학습으로 바꾸는 방법 - Time Series to Supervised Learning with Sliding window

슬라이딩 윈도우를 통해 시계열 데이터를 지도학습으로 변형하기 시계열 데이터 예측(Time series forecasting)은 지도 학습(Supervised learning)으로 변형시킬 수 있다. 이번 글에서는 시계열 문제를 시계

dining-developer.tistory.com

  • 시계열 데이터 집합을 구성하기 위한 슬라이딩 윈도우(Sliding window)를 사용하는 방법

시계열 데이터는 지도 학습으로 표현될 수 있다. 이전 시간의 데이터를 입력(X)으로 사용하고 다음 시간 데이터를 출력(y)으로 사용하면 된다.

 

다음과 같은 시계열 데이터가 있다고 가정하자.

이 시계열 데이터셋을 너비가 1인 윈도우를 통해서 지도 학습으로 재구성해보자.

관측값 1과 관측값 2의 이전 시간 값을 사용한다는 것을 의미한다. 우리가 예측하고 싶은 값이 관측값 2라고 가정해보자.

그렇다면 time 2에서 y=f(X)는 이렇게 쓸 수 있다.

-> window 란 이전 데이터를 몇 개를 봐서 현재 예측하고자 하는 데이터를 예측할거냐? 를 의미하는 것 같다.

 

그러면 만약 관측값 1과 관측값 2 모두 예측하고 싶을 때는 다음과 같이 예측하고자 하는 output = y1,y2를 두개 만들면 된다.

이 경우에도 슬라이딩 윈도우 접근법을 사용하면 된다.

 

  • 다변량 데이터(multivariate data) 및 다단계 예측(multi-step forecasting)에 슬라이딩 윈도우를 적용하는 방법 

예측할 미래 단계수는 중요하다.

예측하는 시간의 단계 수에 따라서 다음과 같이 예측 이름을 다르게 표기한다.

 

One-Step Forecast (1단계 예측) : 단순히 다음 시간(t+1)만 예측하는경우

Multi-Step Forecast (다단계 예측) : 여기서 두 단계 이상의 미래 시간(t+1 ~ t+N)을 예측한다.

다단계라고 하니 뭔가 어감이 좀 이상하지만 나쁜 의미는 아니다.

 

예를 들어서

1단계 예측은 time 1의 관측값 100을 이용해서 time 2이 관측값 110을 예측하는 것이라면

다단계 예측은 time 1의 관측값 100을 이용해서 time 2, time 3 혹은 그 이상의 미래 관측값을 예측하는 것이다.

 

그럼 슬라이딩 윈도우 기법을 적용해 2단계 예측을 할 데이터를 생성해보자.  이번엔 윈도우 크기를 2로 설정하자.

 

시계열 예측지도 학습으로 바꾸는 방법인 슬라이딩 윈도 기법을 살펴보았다.

사실 슬라이딩 윈도라는 용어는 다양한 분야에서 쓰인다. 네트워크에서도 쓰이고 심지어 ETL Spark에서도 쓰이는 용어이기도 하다.(물론 의미하는 바는 다르다)

 

 

3.3. Level 1 and level 2 model: Convolutional Neural Networks

모델링 단계는 두 단계로 구성됩니다(그림 3 참조). 첫 번째 수준에서 목표는 raw input 신호의 time window 인코딩을 생성하는 좋은 모델을 찾는 것이다. 이 인코딩은 입력 데이터의 높은 차원 때문에 필요합니다.
이 인코딩 단계의 또 다른 목표는 입력의 dimension 감소 외에도 가능한 한 많은 노이즈를 제거하는 것이다.
이러한 인코딩은 레벨 2 모델 입력으로 사용됩니다. 이 레벨2 모델의 목표는 RUL의 추정치(예측값)를 제공하는 것이다.

 

두 가지 레벨 모델에 대해 심층 컨볼루션 신경망(DCNN)이 선택되었다. DCNN은 이미지 처리, 자연어 처리, 그리고 완전히 연결된 네트워크(FCN)의 특화되어있고, 음성 인식에 큰 성공을 거두었습니다.

CNN은 local featuremap을 추출하기 위해 매개 변수 공유(parameter sharing) 및 하위 샘플(subsampling)을 사용한다. DCNN의 주요 동작은 convolution과 polling이다. 컨볼루션 작업은 파라미터 공유 및 로컬 수신 필드를 구현한다. 컨볼루션의 방정식은 다음과 같다.

여기서 I는 입력 행렬이고, K는 크기 n x m의 커널=filter 행렬(또는 컨볼루션의 매개 변수)이며, d는 확장 속도이며, S는 피처 맵이라고 불리는 컨볼루션의 결과이다. 커널 매트릭스는 입력 매트릭스를 가로질러 미끄러져 그 어느 위치에나 존재하는 패턴을 찾는다. 따라서 FCN과 비교하여 가중치의 수가 감소하고 추가로 과적합 확률이 감소한다. 풀링 작업은 이전에 직사각형 풀링 영역으로 분할되었던 입력의 각 영역에 통계 연산을 적용하여 다운스케일링을 수행한다. 풀링 작업은 몇 가지 용도로 사용됩니다.
피처 맵이 축소되었기 때문에 상위 레이어에 대한 계산 요구 사항을 줄이고, 완전히 연결된 상위 레이어에 대한 연결 수(parameter)를 줄이고, 공간 변환 불변성의 형태를 제공하며, 과적합 위험을 완화하는 데 도움이 된다.

 

3.4 Cross Validation

https://wooono.tistory.com/105

 

[ML] 교차검증 (CV, Cross Validation) 이란?

교차 검증이란? 보통은 train set 으로 모델을 훈련, test set으로 모델을 검증한다. 여기에는 한 가지 약점이 존재한다. 고정된 test set을 통해 모델의 성능을 검증하고 수정하는 과정을 반복하면, 결

wooono.tistory.com

Cross validation

  • 교차 검증은 train set을 train set + validation set으로 분리한 뒤, validation set을 사용해 검증하는 방식이다.

K-Fold Cross Validation ( k-겹 교차 검증 )

  • 보통 회귀 모델에 사용되며, 데이터가 독립적이고 동일한 분포를 가진 경우에 사용된다.
  • 자세한 K-Fold 교차 검증 과정은 다음과 같다.
    1. 전체 데이터셋을 Training Set과 Test Set으로 나눈다.
    2. Training Set를 Traing Set + Validation Set으로 사용하기 위해 k개의 폴드(위는 k=5)로 나눈다.
    3. 첫 번째 폴드를 Validation Set으로 사용하고 나머지 폴드들을 Training Set으로 사용한다.
    4. 모델을 Training한 뒤, 첫 번 째 Validation Set으로 평가한다.
    5. 차례대로 다음 폴드를 Validation Set으로 사용하며 3번을 반복한다.
    6. 총 k 개의 성능 결과가 나오며, 이 k개의 평균을 해당 학습 모델의 성능이라고 한다.
  from sklearn.datasets import load_iris
  from sklearn.model_selection import KFold
  from sklearn.model_selection import cross_val_score

  iris_data = load_iris()

  # 모델
  logreg = LogisticRegression()

  # n_split : 몇개로 분할할지
  # shuffle : Fold를 나누기 전에 무작위로 섞을지
  # random_state : 나눈 Fold를 그대로 사용할지
  kfold = KFold(n_splits=6, shuffle = True, random_state=0)

  # 파라미터는 (모델, Traingdata의 feature, Trainingdata의 target, 폴드수) 이다.
  scores = cross_val_score(logreg , iris.data , iris.target ,cv=kfold)

  # Trainingdata에 대한 성능을 나타낸다.
  print('교차 검증별 정확도:',np.round(scores, 4))
  print('평균 검증 정확도:', np.round(np.mean(scores), 4))

k-폴드 교차 검증은 k(접힘 수)가 증가하면 검증 집합의 크기가 감소한다는 단점이 있습니다. 이 문제를 극복하는 k-fold 반복 무작위 하위 샘플링 검증으로 대안이 존재한다(그림 4 참조). 이 연구에서는 k = 5이고 검증 폴드 크기가 훈련 세트의 30%인 총 90개에서 27개의 랜덤 단위를 사용하여 이후의 전략이 선택되었다.

 

그림 4

3.5 Model 고르기

모델 선택 단계의 목표는 각 모델에 대한 최적의 매개 변수 구성을 얻는 것이다. 이를 위해 베이지안 최적화가 최적화 전략으로 선택되었다. 모델은 RMSE를 손실로 사용하여 training됐다. 왜냐하면 NASA의 Score S는 미분할 수 없기 때문이다. 그러나 베이지안 최적화에 사용되는 손실 함수는 다음과 같다. (3) 식

Early stop은 마지막 8 epoch에서 성능이 개선되지 않으면 멈춘다.

그리고 lr은 0.1배 감소시킨다. 마지막 3 training epoch에서 validation loss의 향상이 없으면 

 

4.1 Level1 : encoding

레벨 1인코딩 모델은 원시 신호에 대한 차원 및 노이즈 감소를 수행하는 것을 목표로 한다. 이 과제를 달성하기 위해 DCNN 아키텍처가 사용되었다.

그림 5에 나타난 DCNN 아키텍처는 두 부분으로 나눌 수 있다. 첫 번째는 컨볼루션 및 풀링 레이어로 구성된 Nb 블록을 쌓는 것이다. 이 첫 번째 파트의 목표는 잠재적으로 유용한 특성을 추출하는 것이다.

레벨 2FC Layer를 사용해 RUL의 regression을 진행한다.

최적의 하이퍼 파라미터 구성을 얻기 위해 베이지안 최적화가 100회 반복하는 동안 실행되었다. 처음 10개
반복은 무작위로 선택된 하이퍼 파라미터가 있는 모형으로 구성됩니다.

표 2

표 2에는 입력 파라미터 범위와 L1,L2 모델에 대한 최적의 파라미터 구성이 요약되어 있습니다.

그림 7

그림 7은 DCNN 모델에 의해 만들어진 4개의 unit에 대한 예측을 보여줍니다. 신뢰 구간은 [αp - 3≤p, ≤p + 3≤p]로 계산되었다. 여기서 ≤p와 ≤p는 각각 교차 검증 예측의 평균과 분산이다.


차트에서 볼 수 있듯이 모형의 신뢰도는 고장이 더 일찍 발생할 때 더 높습니다. 첫 번째 사이클에서는 모형이 하강 추세를 포착할 수 있을 때까지 예측이 거의 일정한 것처럼 보입니다.

 

4.2 Level2 : RUL 예측

레벨 2 모델의 목적은 최종 RUL 예측을 수행하는 것입니다. 이 모델의 입력은 레벨 1 모델 중 일부에서 생성된 raw input 신호의 인코딩입니다. 따라서, 첫 번째 단계는 fold 당 train 및 test 세트에 대한 인코딩을 생성하기 위해 필요하다. 인코딩은 100개의 뉴런으로 구성된 두 번째 FC layer에서 추출된다.

 

각 후보 레벨 2 모델을 위한 sample input은 인코딩에 대한 슬라이딩 window을 사용하여 생성됩니다.

인코딩은 raw 신호의 차원 축소 버전이기 때문에 레벨 2 모델은 모델의 수용 필드(receptive field)를 확장하고 시간에 따른 추세trend 로부터 학습할 수 있다. 파라미터 step는 인코딩 간의 간격(초)을 정의합니다.

왼: encoding된 ei들을 얻기 위해 raw 신호에 window를 적용 / 오 : encoding input의 모양

그림 6은 모델에 대한 입력을 얻는 방법을 보여줍니다.
영상 채널의 개념은 입력을 구성하는 데 사용됩니다.
각 채널에는 100개의 벡터 인코딩이 있습니다. 따라서, 입력의 총 인코딩 수는 100 · 채널입니다.

 

레벨 2 모델도 DCNN이다. 최적화할 교차 검증 스키마와 매개 변수 범위는 레벨 1 모델과 동일.
또한 이 L2 모델 optimization에서는 fc2, step 및 channels의 세 가지 파라미터를 추가로 고려해야 합니다(표 2 참조).

 

레벨 2 모델의 경우 레벨 1의 모델과 상당히 유사한 파라미터 구성을 가지고 있다(표 2)

훈련 및 정규화 매개 변수에만 차이가 있습니다. 나머지 아키텍처는 동일합니다.
추가 파라미터와 관련하여 파라미터 단계에서 선택한 값이 989라는 점이 흥미롭다.

레벨 1 모델은 RUL을 상당히 잘 추정하기 때문에, 레벨 2 모델은 추세를 포착하고 RUL을 개선하기 위해 희소 인코딩 세트만 있으면 된다.(그림 7 참고)

이 모델의 교차 검증 점수는 3.44점인 반면 앙상블 점수(즉, 점수를 계산하기 전에 예측 평균을 취함)는 2.95점이다. 교차 검증 점수와 앙상블 예측 사이의 이러한 차이는 모델의 예측이 좋은 수준의 nocorrelation을 가지고 있다는 것을 의미한다.

 

그림 7(위)은 레벨 2 모델의 예측과 신뢰 구간(confidence interval)을 보여줍니다. 이를 레벨 1 모델(그림 7)과 비교하면 적층 모델의 예측이 원활해지고 개선되었음을 알 수 있다.

그림 8


그림 8은 실측값 RUL(=ground truth RUL)과 각 stacked 모델에 의해 얻어진 점수 사이의 관계를 보여준다.
마지막으로, 그림 9는 각 클래스의 각 모델의 성능을 보여줍니다. 비행 시간이 짧을수록 모형의 성능이 향상됩니다.
같은 방법으로, 짧은 비행의 경우 레벨 2 모델 성능의 개선이 더 높습니다.

4.3. RUL prediction on test data

최종 모델을 얻기 위한 일반적인 접근법은 사용 가능한 모든 데이터를 사용하여 모델을 훈련하는 것이다.

이 접근 방식에서, 많은 훈련 기간을 선택해야 하므로, 모델 선택 시 사용되는 검증 데이터도 최종 훈련 세트의 일부가 될 것이다.

훈련할 epoch의 수를 선택하기 위해 각 fold에 대해 얻은 최고의 epoch의 평균값이 고려된다.

 

일반적으로 모델의 성능을 validation하려면 train 세트의 일부를 최종 test 세트로 저장해야 합니다. 따라서 train/validation 세트의 샘플 수가 감소합니다. 제안된 방법론에는 다른 접근법이 사용되었는데, 이는 fold당 훈련된 모든 모델을 앙상블로 사용하는 것으로 구성된다. 이 접근법은 두 가지 주요 이점을 가지고 있다.

첫 번째는 교차 검증을 통해 최종 앙상블 모델 성능에 대한 신뢰 메트릭을 얻을 수 있다는 것이다. 두 번째는, 첫 번째와 관련된 것으로, 그림 7과 그림 8과 같이 표본당 예측을 사용하여 최종 평균 예측의 신뢰 구간을 만들 수 있다는 것입니다.

 

점수를 매길 숨겨진 validation 세트는 38개 unit로 구성되었다. 최종 해결책에 의해 생성된 예측은 22, 21, 19, 13, 18, 12, 22, 22, 22, 24, 19, 19, 21, 20, 17, 20, 26, 19, 12, 11, 13, 9, 37, 25, 4, 18, 18, 14, 12, 22, 10, 19, 19이다. 이 점수는 교차 검증 점수에 매우 근접합니다. score의 추정은 예측/점수 분포를 사용하여 얻을 수 있습니다(그림 8 하단). 그러나 앙상블 점수는 2.95점으로 실제 얻은 score와는 거리가 멀다.
이런 오버핏을 줄여 개선의 여지가 있다는 의미다

 

5. 결론

이 과제의 목표는 CMAPSS 시뮬레이터로 생성된 데이터를 사용하여 터보건 항공기 엔진의 RUL을 예측하는 것이었다.

본 연구에서는 최종 솔루션을 얻는 과정을 두 가지 학습 단계로 나눈다. 첫 번째는 raw 데이터의 인코딩을 학습하고 두 번째 학습 단계의 입력으로 사용하여 RUL을 추정할 수 있는 최종 모델을 얻는다.

 

현재 솔루션의 5가지 개선사항

1) Smoothing the RUL among cycles could smooth the error space, thus helping in the learning process.

- cycle 간 RUL을 평활하면 error space을 평활하게 하여 학습 과정에 도움이 될 수 있다.

 

2) In the proposed methodology, the inputs having a number of cycles lower than that required by the network, have been excluded from the training process. In the case of the validation set, these inputs were filled with the earliest encoding. It is expected that training the networks applying the same filling will help reducing the overfitting.

- 제안된 방법론에서 네트워크에 필요한 것보다 낮은 사이클 수를 갖는 입력은 훈련 프로세스에서 제외되었다. validation 세트의 경우, 이러한 입력은 가장 초기의 인코딩으로 채워졌다(filled). 

그러므로 동일한 filling을 네트워크를 훈련시킬 때 사용하면 overfitting을 막기 좋을 것이다.

 

3) Another possible improvement could be to balance the training folds so each failure type is properly represented in each validation set.

- 다른 가능한 개선사항은 각 고장 유형이 각 validation 세트에서 적절하게 표현되도록 training folds의 균형을 맞추는 것입니다.

 

4) Train the level 2 model with a random gap between encodings. This allow to expand the training set, have an additional mechanism to compute the confidence intervals, and increase the number of predictions to calculate the final averaged RUL.

- 인코딩 간의 랜덤 간격을 사용하여 레벨 2 모형을 훈련해봐라. 이를 통해 훈련 세트를 확장하고, confidence interval을 계산하기 위한 추가 메커니즘을 가지며, 예측 수를 증가시켜 최종 평균 RUL을 계산할 수 있다.

 

5) Finally, it would be interesting to study how predictive are the class and the health state features.

- 마지막으로, 클래스 및 health 상태 특징이 얼마나 예측 가능한지를 연구하는 것은 흥미로울 것이다.

 

 

코드

https://github.com/DatrikIntelligence/Stacked-DCNN-RUL-PHM21

 

GitHub - DatrikIntelligence/Stacked-DCNN-RUL-PHM21: Source code of the paper "A stacked DCNN to predict the RUL of a turbofan en

Source code of the paper "A stacked DCNN to predict the RUL of a turbofan engine", third place ranked in the PHM21 data challenge. - GitHub - DatrikIntelligence/Stacked-DCNN-RUL-PHM21: So...

github.com

 

레벨1 encoding과 레벨2 trending을 각각 train 시킨다. train_l1.py와 train_l2.py를 실행시킨다.

Level 1 training
Level 2 training

models.py

from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Activation, MaxPooling2D, Reshape, Input, Dropout
from tensorflow.keras.layers import BatchNormalization, Lambda, Conv2DTranspose, Add
from tensorflow.keras import regularizers
from tensorflow.keras.optimizers import Adam
import tensorflow as tf
from tensorflow.keras import regularizers
from tensorflow.keras import initializers
from tensorflow.keras import constraints
import tensorflow.keras.backend as K
import numpy as np
import inspect
from scoring import *
from tensorflow.keras.layers.experimental.preprocessing import Resizing
    
activations = ['relu', tf.keras.layers.LeakyReLU(alpha=0.1), 'tanh']
kernels = [(3,3), (10, 1), (10, 5)]      
scorers = [None, 'mean_squared_error']
def create_cnn_model(input_shape, block_size=2, nblocks=2, l1=1e-5, l2=1e-4, 
                     kernel_size=0, dropout=0.5, lr=1e-3, fc1=256, fc2=128,
                     conv_activation=2, dense_activation=2, dilation_rate=1,
                     batch_normalization=1, scorer=1):
    block_size = int(round(block_size))
    nblocks = int(round(nblocks))
    scorer = scorers[int(round(scorer))]
    fc1 = int(round(fc1))
    fc2 = int(round(fc2))
    dilation_rate = int(round(dilation_rate))
    conv_activation = activations[int(round(conv_activation))]
    dense_activation = activations[int(round(dense_activation))]
    kernel_size = kernels[int(round(kernel_size))]
    batch_normalization = True if batch_normalization == 1 else False
    
    input_tensor = Input(input_shape)
    x = input_tensor
    for i, n_cnn in enumerate([block_size] * nblocks):
        for j in range(n_cnn):
            x = Conv2D(32*2**min(i, 2), kernel_size=kernel_size, padding='same', 
                       kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2),
                       kernel_initializer='he_uniform',
                       dilation_rate=dilation_rate,
                       name='Conv%d_Block%d' % (j, i) )(x)
            if batch_normalization:
                x = BatchNormalization(name='BN%d_Block%d' % (j, i))(x)
            x = Activation(conv_activation, name='A%d_Block%d' % (j, i))(x)
        x = MaxPooling2D(2, name='MP%d_Block%d' % (j, i))(x)
        if dropout > 0:
            x = Dropout(dropout, name='DO%d_Block%d' % (j, i))(x)

    x = Flatten()(x)
    
    # FNN
    x = Dense(fc1, name='Fc1', 
             kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2))(x)
    x = Activation(dense_activation, name='Act_Fc1', )(x)
    if dropout > 0:
        x = Dropout(dropout, name='DO_Fc1')(x)
    x = Dense(fc2, name='Fc2', 
             kernel_regularizer=regularizers.l1_l2(l1=l1, l2=l2))(x)
    x = Activation(dense_activation, name='Act_Fc2')(x)
    if dropout > 0:
        x = Dropout(dropout, name='DO_Fc2')(x)
    x = Dense(1, activation='relu', name='predictions')(x) 
    model = Model(inputs=input_tensor, outputs=x)
    model.compile(loss=scorer, optimizer=Adam(lr=lr), 
                  metrics=[NASAScore(), PHM21Score(), tf.keras.metrics.MeanAbsoluteError(name="MAE")])
    
    return model