skip to Main Content
1544-6561|070-4842-6588 koandi.com@gmail.com

홈 오토메이션의 인기와 전기 요금이 전 세계적으로 증가함에 따라 에너지 절약은 많은 소비자에게 최우선 순위가되었습니다. 가정용 스마트 계량기를 사용하면 가정용 전력 소비량을 측정하고 기록 할 수 있으며 기계 학습 모델의 출력을 통해 계량기 데이터를 분석하여 개별 기기 동작을 정확하게 예측할 수 있습니다. 예를 들어, 전기 기사 제공 업체가 냉장고 문을 열어 두었다 고 합리적으로 판단 할 수 있거나 이상한 시간에 관개 시스템이 갑자기 켜진 경우 메시지를 보낼 수 있습니다.

이 게시물에서는 스마트 전력 판독 값을 사용하여 가전 제품 (예 : 전기 주전자 및 세탁기,이 데이터 세트에서)의 작동 상태를 LSTM (Long Short-Term Memory)과 같은 최신 기계 학습 기술과 함께 정확하게 식별하는 방법을 배우게됩니다. 모델. 알고리즘이 어플라이언스의 작동 상태를 식별하면 몇 가지 응용 프로그램을 작성할 수 있습니다. 예 :

  • 이상 감지 : 일반적으로 집에 TV가없는 경우 TV가 꺼집니다. 예기치 않게 또는 비정상적인 시간에 TV가 켜지면 응용 프로그램에서 사용자에게 메시지를 보낼 수 있습니다.
  • 습관 개선 권장 사항 : 사용자는 집계 수준에서 가전 제품의 사용 패턴을 사용자에게 제시하여 사용 패턴을 비교하거나 참조하고 가전 제품의 사용을 최적화 할 수 있습니다.

Google은 Cloud IoT Core를 통한 데이터 수집 , TensorFlow를 사용하여 제작 되고 Cloud Machine Learning Engine 에 대해 교육 된 기계 학습 모델 , Cloud에서 가능해진 실시간 제공 및 예측을 포함하여 Google Cloud Platform에서 전적으로 엔드 – 투 – 엔드 데모 시스템을 개발했습니다. Pub / Sub , App Engine 및 Cloud ML 엔진을 포함합니다. 이 게시물을 진행하면서 GitHub 저장소의 전체 소스 파일에 액세스 할 수 있습니다 .

소개

증가하는 IoT 장치의 인기와 기계 학습 기술의 발전으로 인해 비즈니스에 새로운 기회가 생겼습니다. 이 글에서는 스마트 계량기에서 수집 한 총 전력 판독 값과 가전 기기 상태 (예 : 전기 주전자 및 세탁기) 작동 상태 (켜기 / 끄기)를 추측 할 수있는 방법을 배우게됩니다. 최첨단 기계 학습 기술. Google Cloud Platform에서 전적으로 개발 된 엔드 투 엔드 데모 시스템 (그림 1 참조)에는 다음이 포함됩니다.

  • Cloud IoT Core 및 Cloud Pub / Sub를 통한 데이터 수집 및 수집
  • Cloud ML 엔진을 사용하여 학습 한 기계 학습 모델
  • 동일한 기계 학습 모델, Cloud Engine을 App Engine과 함께 프런트 엔드로 사용했습니다.
  • BigQuery 및 Colab을 사용한 데이터 시각화 및 탐색
그림 1. 시스템 아키텍처 .png
그림 1. 시스템 아키텍처

아래의 애니메이션은 실제 에너지 사용량 데이터가 Cloud IoT Core를 통해 Colab에 수집되므로 실시간 모니터링을 보여줍니다 .

그림 2. 실시간 monitoring.gif의 그림
그림 2. 실시간 모니터링의 그림

IoT는 기계 학습의 범위를 확장합니다.

데이터 처리

어떤 기계 학습 모델을 훈련시키기 위해서는 수량 적으로 충분하고 충분한 데이터가 필요합니다. IoT 분야에서는 스마트 IoT 장치로 수집 된 데이터를 원격 중앙 집중식 서버로 안전하고 안전하게 전송하기 위해 여러 가지 문제를 해결해야합니다. 다른 요인들 중에서도 데이터 보안, 전송 안정성 및 사례 별 적시성을 고려해야합니다.

Cloud IoT Core는 전 세계적으로 분산되어있는 수백만 대의 장치에서 데이터를 쉽고 안전하게 연결, 관리 및 수집 할 수있는 완벽하게 관리되는 서비스입니다. Cloud IoT Core의 두 가지 주요 기능은 장치 관리자와 프로토콜 브리지입니다. 전자는 각 연결 후에 인증과 함께 장치의 ID를 설정하고 유지 관리하여 개별 장치를 대략적으로 구성 및 관리 할 수 ​​있습니다. 또한 장치 관리자는 각 장치의 논리적 구성을 저장하고 스마트 전력 계량기의 데이터 샘플링 속도를 변경하는 등 장치를 원격으로 제어 할 수 있습니다. 프로토콜 브릿지는 모든 장치 연결에 대한 자동로드 밸런싱 기능을 갖춘 연결 엔드 포인트를 제공하며 MQTT 및 HTTP와 같은 업계 표준 프로토콜을 통한 보안 연결을 기본적으로 지원합니다. 프로토콜 브리지는 모든 장치 원격 측정을 Cloud Pub / Sub에 게시합니다.이 장치는 다운 스트림 분석 시스템에서 사용할 수 있습니다. 우리는 데모 시스템에서 MQTT 브리지를 채택했으며 다음 코드 단편은 MQTT 특정 로직을 포함합니다.

def publish(self):
    # Finish if inactive
    if not self._active:
        return

    # Process network events.
    self.client.loop()

    # Wait if backoff is required.
    if Publisher.should_backoff:
        # If backoff time is too large, give up.
        if Publisher.minimum_backoff_time > MAXIMUM_BACKOFF_TIME:
            print('Exceeded maximum backoff time. Giving up.')
            return
        # Otherwise, wait and connect again.
        delay = (Publisher.minimum_backoff_time + 
                 random.randint(0, 1000) / 1000.0)
        print('Waiting for {} before reconnecting.'.format(delay))
        time.sleep(delay)
        Publisher.minimum_backoff_time *= 2
        self.client.connect(self.mqtt_bridge_hostname, self.mqtt_bridge_port)

    # Refresh token if JWT IAT has expired.
    seconds_since_issue = (datetime.datetime.utcnow() - self._jwt_iat).seconds
    if seconds_since_issue > 60 * self.jwt_exp_mins:
        print('Refreshing token after {}s').format(seconds_since_issue)
        self._jwt_iat = datetime.datetime.utcnow()
        self.client = self.get_client()

    # Generate payload
    d, t = self._data[self._count]
    Publisher.rotate_message(self._msg, d, t)
    payload = json.dumps(self._msg).encode('utf-8')

    # Publish "payload" to the MQTT topic. qos=1 means at least once
    # delivery. Cloud IoT Core also supports qos=0 for at most once
    # delivery.
    self.client.publish(self._mqtt_topic, payload, qos=1)
    self._count += 1

데이터 소비

시스템이 Cloud Pub / Sub에 데이터를 게시하면 일반적으로 데이터를 사용하는 게이트웨이 서비스 인 “푸시 엔드 포인트”에 메시지 요청을 전달합니다. 데모 시스템에서 Cloud Pub / Sub는 App Engine에 호스트 된 게이트웨이 서비스에 데이터를 푸시합니다. App Engine은 그 데이터를 추론을 위해 Cloud ML 엔진에 호스트 된 기계 학습 모델로 전달하고 동시에 수신 된 데이터와 함께 원시 데이터를 저장합니다 나중에 (배치) 분석을 위해 BigQuery의 예측 결과.

샘플 코드를 기반으로 배포 할 수있는 수많은 비즈니스 종속 유스 케이스가 있지만 우리는 데모 시스템에서 원시 데이터와 예측 결과 시각화를 설명합니다. 코드 저장소에서 두 가지 노트북 을 제공했습니다 .

  • EnergyDisaggregationDemo_Client.ipynb:이 노트북은 실제 세계 데이터 집합에서 전력 소비 데이터를 읽어 여러 스마트 미터를 시뮬레이트하고 판독 값을 서버에 전송합니다. 모든 Cloud IoT 코어 관련 코드는이 노트북에 있습니다.
  • EnergyDisaggregationDemo_View.ipynb:이 노트북을 사용하면 지정된 스마트 미터의 원시 전력 소비 데이터와 모델의 예측 결과를 거의 실시간으로 볼 수 있습니다.

README파일 및 함께 제공되는 노트북 의 배포 지침을 따르는 경우 그림 2와 같은 결과를 재현 할 수 있어야합니다. 한편, 분산 방식 파이프 라인을 다른 방식으로 구축하려는 경우, Cloud Dataflow 및 Pub / Sub I / O 를 사용하여 유사한 기능을 갖춘 앱을 구축 할 수 있습니다.

데이터 처리 및 기계 학습

데이터 세트 소개 및 탐색

우리는 공개적으로 이용 가능한, 영국 가전 제품 수준 전기 (UK-DALE을 사용하여, 총 전력 측정 값에서 온 / 오프 상태에있는 각 기기의를 예측하는 우리의 모델을 훈련 여기 1) 데이터 세트를 재생할 수 있도록 해줍니다. UK-DALE은 5 세대에서 6 초마다 전체 기기 전력 소모량과 각 기기 별 사용량을 기록합니다. 당사는 집 # 2의 데이터를 사용하여 솔루션을 시연합니다.이 데이터 세트에는 총 18 개의 어플라이언스 전력 소모가 포함됩니다. 데이터 집합의 세분성 (1/6 Hz의 샘플 속도)이 주어지면 상대적으로 작은 전력 사용으로 가전 제품을 추정하기가 어렵습니다. 결과적으로 랩톱 및 컴퓨터 모니터와 같은 어플라이언스가이 데모에서 제거됩니다. 아래에 표시된 데이터 탐사 조사를 기반으로 우리는 디스트리뷰터, 세탁기, 식기 세척기, 전자 레인지, 토스터기, 전기 주전자, 밥솥 및 “밥솥”, 일명 전기 스토브 등 대상 제품으로 원래 18 개 항목에서 8 가지 제품을 선택했습니다. .

아래 그림은 선택된 어플라이언스의 전력 소비 막대 그래프를 보여줍니다. 모든 기기가 대부분 꺼져 있기 때문에 대부분의 수치는 0에 가깝습니다. 그림 4는 선택된 어플라이언스 (`app_sum`)와 전체 하우스 전력 소비 (`gross`)의 총 전력 소비량을 비교 한 것입니다. 데모 시스템의 입력은 총 소비량 (파란 곡선)이며, 이는 가장 손쉽게 사용할 수있는 전력 사용량 데이터이며 가정 밖에서도 측정 할 수 있기 때문에 주목할 가치가 있습니다.

그림 3. 대상 기기 및 수요 히스토그램 .png
그림 3. 대상 기기 및 수요 히스토그램
그림 4. House # 2의 데이터 샘플 (2013-07-04 UTC) .png
그림 4. House # 2의 데이터 샘플 (2013-07-04 UTC)

2 호기의 데이터는 2013 년 2 월 말에서 10 월 초순까지 제공됩니다. Google은 데모 시스템에서 6 월에서 9 월까지의 데이터를 기간의 양쪽 끝에서 누락 된 데이터로 사용했습니다. 선택한 어플라이언스에 대한 설명 요약은 표 1에 설명되어 있습니다. 예상대로 데이터는 각 어플라이언스의 “켜짐”과 “꺼짐”에 대해 극도로 불균형을 띠며 이로 인해 각 어플라이언스의 주요 어려움이 발생합니다. 예측 작업.

표 1. 전력 소비에 대한 설명 요약 .png
표 1. 전력 소비에 대한 설명 요약

데이터 전처리

UK-DALE은 개별 어플라이언스의 on / off 상태를 기록하지 않았기 때문에 하나의 주요 전처리 단계는 각 타임 스탬프마다 각 어플라이언스의 on / off 상태를 표시하는 것이다. 어플라이언스가 대부분 꺼져있어 판독 값의 대부분이 제로에 가깝다는 가정하에 소비 전력이 전력 판독 값의 표본 평균으로부터 표준 편차보다 큰 경우 어플라이언스를 “켜기”로 가정합니다. 데이터 전처리 코드는 제공된 노트북에서 찾을 수 있으며 여기 에서 처리 된 데이터를 다운로드 할 수도 있습니다 .

TensorFlow 의 데이터 세트 클래스는 CSV 형식의 사전 처리 된 데이터를 사용하여 데이터로드 및 변환을위한 편리한 도구로 사용됩니다 (예 : 기계 학습 모델 교육을위한 입력 파이프 라인). 예를 들어, 다음 코드 스 니펫에서 7-9 행은 지정된 CSV 파일에서 데이터를로드하고 11-13 행은 데이터를 원하는 시간 순서로 변환합니다.

01      def _mk_data(*argv):
02            data = {'ActivePower_{}'.format(i+1): x
03                         for i, x in enumerate(tf.split(argv[0], seq_len))}
04            flags = [tf.split(x, seq_len)[-1][0] for x in argv[1:]]
05            return (data, tf.cast(tf.stack(flags), dtype=tf.uint8))
06
07      record_defaults = [tf.float64,] + [tf.int32] * (len(cols) - 1)
08      dataset = tf.contrib.data.CsvDataset(
09              [data_file,], record_defaults, header=True, select_cols=cols)
10
11      dataset = dataset.apply(
12              tf.contrib.data.sliding_window_batch(window_size=seq_len))
13      dataset = dataset.map(_mk_data, num_parallel_calls=os.cpu_count())

데이터 불균형 문제를 해결하기 위해 다수 클래스를 다운 샘플링하거나 소수 클래스를 업 샘플링 할 수 있습니다. 우리는 확률 적 음수 다운 샘플링 방법을 제안합니다. 최소한 하나의 어플라이언스가 켜져있는 하위 시퀀스는 보존하지만 일부 확률 및 임계 값을 기준으로 모든 어플라이언스를 제외하고 하위 시퀀스를 필터링합니다. 필터링 로직 tf.data은 다음 코드 스니 j에서 와 같이 API 와 쉽게 통합 됩니다.

01    def _filter_data(data, labels):
02             rand_num = tf.random_uniform([], 0, 1, dtype=tf.float64)
03             thresh = tf.constant(filter_prob, dtype=tf.float64, shape=[])
04             is_all_zero = tf.equal(tf.reduce_sum(labels), 0)
05             return tf.logical_or(tf.logical_not(is_all_zero), tf.less(rand_num, thresh))
06    if train_flag:
07        dataset = dataset.filter(_filter_data)

마지막으로 입력 파이프 라인 성능 가이드의 모범 사례를 따라 GPU 또는 TPU (교육 프로세스 속도 향상에 사용되는 경우) 리소스가 입력 파이프 라인에서 데이터로드를 기다리는 동안 낭비되지 않도록해야합니다. 사용법을 극대화하기 위해 병렬 변환을 사용하여 데이터 변환을 병렬 처리하고 데이터를 프리 페치하여 다음 코드 스 니펫과 같이 교육 단계의 전처리 및 모델 실행을 겹칩니다.

01    if shuffle:
02        dataset = dataset.apply(
03          tf.contrib.data.shuffle_and_repeat(
04            buffer_size=batch_size * 10,
05            count=num_epochs))
06    else:
07        dataset = dataset.repeat(count=num_epochs)
08
09    dataset = dataset.batch(batch_size)
10    dataset = dataset.prefetch(buffer_size=None)

기계 학습 모델

분류 모형으로 LSTM (long-term memory) 기반 네트워크를 채택합니다. 재발 성 신경 네트워크 및 LSTM 에 대한 소개는 LSTM 네트워크 이해를 참조하십시오 . 그림 5는 우리의 모델 설계를 n보여주는데, 길이의 입력 시퀀스가 다중 계층 LSTM 네트워크에 공급되고 모든 m기기에 대해 예측이 이루어진다 . 드롭 아웃 레이어가 LSTM 셀의 입력을 위해 추가되고 전체 시퀀스의 출력이 완전히 연결된 레이어로 공급됩니다. 우리는이 모델을 TensorFlow 평가자로 구현했습니다.

그림 5. LSTM 기반 모델 architecture.png
그림 5. LSTM 기반 모델 아키텍처

위의 아키텍처를 구현하는 두 가지 방법이 있습니다. TensorFlow 네이티브 API ( tf.layers및 tf.nn)와 Keras API ( tf.keras)입니다. TensorFlow의 네이티브 API와 비교할 때 Keras는 사용하기 쉽고 모듈화되며 확장 성이라는 세 가지 주요 이점을 통해 심층 학습 모델을 교육하고 제공 할 수있는 고급 API로 사용됩니다. tf.keras TensorFlow의 Keras API 사양 구현입니다. 다음 코드 샘플에서는 두 방법을 모두 사용하여 동일한 LSTM 기반 분류 모델을 구현하여 두 가지를 비교할 수 있습니다.

TensorFlow의 기본 API를 사용한 모델 제작 :

# RNN network using multilayer LSTM
  cells = [tf.nn.rnn_cell.DropoutWrapper(
    tf.nn.rnn_cell.LSTMCell(params['lstm_size']), input_keep_prob=1 - params['dropout_rate'])
    for _ in range(params['num_layers'])]
  lstm = tf.nn.rnn_cell.MultiRNNCell(cells)

  # Initialize the state of each LSTM cell to zero
  state = lstm.zero_state(batch_size, dtype=tf.float32)
  outputs, states = tf.nn.dynamic_rnn(cell=lstm,
                                      inputs=tf.expand_dims(seq_data, -1),
                                      initial_state=state,
                                      dtype=tf.float32)

  # Flatten the 3D output to 2D
  flatten_outputs = tf.layers.Flatten()(outputs)
  logits = tf.layers.Dense(params['num_appliances'])(flatten_outputs)

Keras API를 사용하여 모델 제작 :

# RNN network using multilayer LSTM with the help of Keras
  model = keras.Sequential()
  for _ in range(params['num_layers']):
    model.add(
      keras.layers.LSTM(params['lstm_size'],
                        dropout=params['dropout_rate'],
                        return_sequences=True)
    )

  # Flatten the 3D output to 2D
  model.add(keras.layers.Flatten())

  model.add(keras.layers.Dense(params['num_appliances']))
  logits = model(tf.expand_dims(seq_data, -1))

교육 및 하이퍼 매개 변수 튜닝

클라우드 머신 학습 엔진 은 교육 및 하이퍼 매개 변수 조정을 모두 지원합니다. 도 6 (모든 기기 이상)의 평균을 나타내고 precisionrecall및 f_score하이퍼 파라미터의 상이한 조합에 대한 여러 실험. 우리는 하이퍼 매개 변수 튜닝이 모델 성능을 크게 향상시키는 것을 관찰했습니다.

그림 6. 하이퍼 매개 변수 튜닝에서 학습 곡선 ..png
그림 6. 하이퍼 매개 변수 튜닝에서 학습 곡선.

하이퍼 파라미터 튜닝으로부터 최적의 점수를 가진 두 개의 실험을 선택하고 그 성능을 표 2에보고했습니다.

표 2. 선택한 실험의 하이퍼 매개 변수 튜닝 .png
표 2. 선택한 실험의 하이퍼 매개 변수 조정

표 3은 각 기기의 정밀도와 리콜을 나열합니다. 이전의 “데이터 세트 소개 및 탐색”섹션에서 언급 한 것처럼 밥솥과 러닝 머신 ( “러닝 머신”)은 피크 전력 소모량이 다른 기기보다 현저히 낮기 때문에 예측하기 어렵습니다.

표 3. 개별 어플라이언스에 대한 예측 정확도 및 회수율 .png
표 3. 개별 어플라이언스에 대한 예측 정확도 및 리콜

결론

우리는 스마트 파워 판독 값만을 기준으로 기계 학습을 사용하여 가전 제품의 작동 상태를 정확하게 결정하는 방법에 대한 철저한 시연을 제공했습니다. Cloud IoT Core ,   Cloud Pub / Sub ,   Cloud ML Engine , App Engine 및 BigQuery를 비롯한 여러 제품 이 전체 시스템을 지원하도록 조정되어 각 제품이 데이터 수집 / 처리, 컴퓨터와 같은이 데모를 구현하는 데 필요한 특정 문제를 해결합니다. 학습 모델 교육, 실시간 서비스 / 예측 등 을 할 수 있습니다. 코드 와 데이터 는 모두 사용자가 직접 시스템을 시험해보고자하는 사용자에게 제공됩니다.

우리는 더 많은 IoT 장치와 빠르게 진화하는 기계 학습 알고리즘의 교차점에서 우리와 고객 모두가 더욱 흥미로운 응용 프로그램을 개발할 것이라는 점을 낙관하고 있습니다. Google Cloud는 IoT 인프라와 기계 학습 교육 및 새로 제공되는 스마트 IoT 배포를 가능하고 현실로 만드는 기능을 제공합니다.

1. Jack Kelly와 William Knottenbelt. UK-DALE 데이터 세트, 국내 가전 기기 수준의 전력 수요 및 5 개의 영국 가정에서의 전체 주택 수요. Scientific Data 2, 기사 번호 : 150007, 2015, DOI : 10.1038 / sdata.2015.7.

Back To Top