Translate

2019년 3월 31일 일요일

산소 없이도 뛰는 먹장어의 심장


(University of Guelph researchers deprived hagfish hearts of oxygen and then fed the organs saline containing either glucose, glycerol or no fuel source. The researchers found feeding the hearts glycerol enhanced the hearts' contraction even more so then glucose, which is typically the fuel muscles prefer. These findings could have implications for preventing tissue damage to the human heart when oxygen delivery is impaired, such as during a heart attack or transplant. Credit: University of Guelph)


 먹장어는 이름 때문인지 장어의 일종으로 오해받지만, 사실 장어 같은 경골어류가 아니라 아득한 오래전 모습을 드러낸 척추동물의 첫 번째 그룹인 무악어류의 일종입니다. 턱이 없는 원시적인 어류인 먹장어는 다른 척추동물이 갖지 않은 독특한 생리적 특징을 지니고 있는데 그 중 하나가 바로 저산소 환경에서 잘 버틴다는 것입니다. 특히 먹장어의 심장은 산소 공급이 없는 무산소 환경에서도 오랫동안 작동이 가능합니다. 



 아무리 원시적이라고 해도 대부분의 진핵세포와 다세포 동물은 산소를 필요로합니다. 먹장어라고 해도 이점은 다르지 않지만, 산소가 부족한 깊은 바다에서 살기 위해 저산소 환경에 적응했을 것입니다. 먹장어의 심장은 심지어 36시간 정도 산소가 없어도 그 기능을 유지합니다. 비슷한 상황이 포유류에 발생했다면 수분 이내로 심장이 정지해 사망했을 것입니다. 


 궬프 대학(University of Guelph)의 토드 길리스 교수 (Prof. Todd Gillis)가 이끄는 연구팀은 먹장어 심장 세포의 비밀을 풀기 위해 연구를 진행했습니다. 연구팀은 먹장어의 심장 세포가 포도당이나 글리세롤, 글리코겐에서 에너지를 얻는다고 생각하고 각각의 배양 용액과 아무것도 낳지 않은 배양 용액에 낳어 무신소 환경에서 수축력과 수축 시간을 비교했습니다. 그 결과 글리세롤이 있는 배양 용액에서 심장 세포가 현저하게 잘 뛴다는 사실을 확인했습니다. 


 물론 글리세롤 하나만이 아니라 저산소 환경에서 오래 버틸 수 있는 낮은 대사율 역시 중요한 이유겠지만, 심장 세포가 일단 움직이려면 산소능 없어도 에너지는 필요합니다. 먹장어는 혈중 글리세롤 농도가 높으며 간에서 이를 저장했다가 방출하는 것으로 보입니다. 다만 아직까지 모르는 이유 역시 존재할 것으로 보입니다. 아무튼 먹장어의 예상치 않았던 놀라운 능력 같습니다. 



 참고 


L. A. Gatrell et al, Contractile function of the excised hagfish heart during anoxia exposure, Journal of Comparative Physiology B (2019). DOI: 10.1007/s00360-019-01208-w




우주 이야기 895 - 외계 행성의 대기를 확인한 GRAVITY



(The GRAVITY instrument on ESO's Very Large Telescope Interferometer (VLTI) has made the first direct observation of an exoplanet using optical interferometry. This method revealed a complex exoplanetary atmosphere with clouds of iron and silicates swirling in a planet-wide storm. The technique presents unique possibilities for characterising many of the exoplanets known today. Credit: ESO/L. Calçada)


 유럽 남방 천문대 (ESO) 의 거대 망원경 간섭계 Very Large Telescope Interferometer (VLTI)와 GRAVITY 시스템이 지구에서 129광년 떨어진 외계 행성의 대기를 정밀하게 관측했습니다. HR8799는 아직 형성되지 않은 뜨거운 행성을 품은 행성계로 거대 망원경으로 직접 관측이 가능해 많은 연구가 이뤄졌습니다. 하지만 이 행성의 대기를 직접 관측하는 일은 현재 가장 강력한 망원경으로도 어려운 일입니다. 


 현재 망원경으로 가능한 가장 현실적인 대안은 여러 개의 망원경을 묶은 간섭계로 하나의 거대 망원경처럼 사용하는 것입니다. 물론 실제 초대형 망원경보다 성능은 떨어지고 선명한 이미지를 얻을 순 없지만, 대신 여러 가지 데이터를 확보할 수 있습니다. 이번 연구에서는 외계 행성 HR8799e의 대기에 대한 상세한 정보가 얻어졌습니다. 




(동영상)


 HR8799e는 목성보다 크고 무거운 외계 행성으로 태어난지 3000만년 밖에 되지 않았습니다. 이 행성이 생성되면서 생긴 열과 온실효과에 의해 행성 표면 온도는 섭씨 1000도에 이릅니다. 이 뜨거운 행성 대기에는 철과 규산염의 먽 폭풍이 날리고 있습니다. 흥미로운 부분은 일산화탄소의 함량이 메탄보다 더 많다는 것인데 이는 강력한 수직 폭풍에 의한 것으로 생각됩니다. 폭풍의 행성으로 불리는 목성보다 더 강력한 폭풍이 불고 있음을 시사하는 소견입니다. 


 앞으로 관측 기술이 계속해서 발전하면서 과거에는 알 수 없던 외계 행성의 진짜 모습이 하나씩 드러날 것입니다. 차세대 망원경이 가동에 들어선 이후가 기대됩니다. 


 참고 




우주 이야기 894 - 뜨거운 토성을 찾은 TESS 데이터



(A "hot Saturn" passes in front of its host star in this illustration. Astronomers who study stars used "starquakes" to characterize the star, which provided critical information about the planet. Credit: Gabriel Perez Diaz, Instituto de Astrofísica de Canarias)


 국제 과학자 팀이 나사의 TESS 데이터를 바탕으로 뜨거운 토성형 행성을 찾아냈습니다. TESS는 수명을 다한 케플러 우주 망원경의 후계자로 케플러보다 훨씬 많은 외계 행성을 찾아낼 것으로 기대하고 있습니다. 이번 발견은 앞으로 이어질 수많은 외계 행성 발견의 시작이라고 할 수 있습니다. 


 TOI 197.01 (TOI is short for "TESS Object of Interest")라고 명명된 이 외계 행성은 지구 지름의 9배에 질량은 60배로 사실 밀도는 토성보다도 낮아 지구의 1/13에 불과합니다. 공전 주기는 14일 정도로 모항성에 매우 가까이 있어 뜨거운 가스 행성이 된 것이 이유일 것입니다. 그래도 목성보다 큰 질량을 지녔다면 자체 중력으로 밀도 유지가 되는데 질량이 작아서 그렇지 못한 것입니다. 


 흥미로운 부분은 성진학 asteroseismology 연구를 통해 모항성이 태양과 비슷한 50억년이라는 점과 이 외계 행성의 물리적 특성에 대한 여러 정보를 제공했다는 점입니다. 별의 미세한 밝기 변화를 추적해 표면의 변화와 별 내부의 특성을 파악하는 성진학 역시 TESS와 밀접한 연관이 있습니다. 


 앞으로 TESS를 통해 수많은 외계 행성 데이터가 쏟아질 것으로 기대합니다. 


 참고 



2019년 3월 30일 토요일

우주 이야기 893 - 인공지능으로 찾아낸 외계 행성



(Credit: NASA)


 텍사스 대학의 과학자들이 구글과 협력을 통해 인공지능을 이용해 외계 행성을 찾아냈습니다. 텍사스 대학의 앤 다틸로(Anne Dattilo)와 나사, 구글의 연구팀은 케플러 우주 망원경이 남긴 K2 데이터를 인공지능으로 분석해 기존의 방식으로 찾아내지 못한 두 개의 외계 행성을 추가로 확인했습니다. 


 이번에 발견된 외계 행성은 모항성에서 매우 가까운 궤도를 공전하는 뜨거운 목성형 행성으로 지구에서 1300광년 떨어진  K2-293b와 1230광년 떨어진 K2-294b의 두 개입니다. 인공지능이 찾아낸 행성 후보는 지상 망원경의 추가 관측을 거쳐 그 존재가 입증됐습니다. 


 이미 케플러 데이터를 통해 수천 개의 외계 행성을 찾아냈기 때문에 사실 여기서 두 개가 더 추가된다는 것이 대수롭지 않게 보일 수 있지만, 인공지능을 적용할 데이터가 지금도 많고 앞으로는 더 많다는 점을 생각하면 흥미로운 사실입니다. 예를 들어 TESS 데이터는 케플러보다 더 많으며 앞으로 이를 확인하는데 상당한 시간이 필요할 것입니다. 만약 외계 행성 후보들을 찾아내는 과정을 자동화할 수 있다면 과학자들은 막대한 시간과 노력을 절감할 수 있을 것입니다. 


 인공지능은 과학자들을 돕는 똑똑한 비서로 앞으로 점점 그 역할이 늘어날 것으로 기대됩니다. 


 참고 


일본이 개발한 무인 화재 진압 로봇





(Credit: Mitsubishi Heavy Industries)


 위험한 화재 현장에 사람 대신 로봇을 투입하려는 아이디어는 이전부터 있어 왔고 실제로 일부 현장에서 사용되고 있지만, 아직 더 많은 연구 개발이 필요합니다. 일본의 미쓰비시 중공업 (Mitsubishi Heavy Industries (MHI))은 5년 계획으로 원격으로 조종이 가능한 물대포 로봇과 이를 지원하는 호스 연장 로봇 (Water Cannon Robot and Hose Extension Robot)을 개발하고 있습니다. 


 생김새는 투박하지만, 이 로봇들은 한 가지 목적을 위해 최적화되어 있습니다. 사람이 접근하기 위험한 화재 현장에서 사람 대신 수백 미터를 이동해서 소화액이나 물을 분사하는 것입니다. 이를 위해서는 단순히 물대포 로봇만이 아니라 호스를 같이 옮길 로봇이 필요합니다. 호스 연장 로봇은 최대 300m까지 호스를 연장해 로봇의 화재 진압 범위를 넓힐 수 있습니다. 




(동영상) 


 2,170 x 1,460 x 2,070 mm 크기의 물대포 로봇은 무게 1600kg이며 분당 4000리터의 물을 1MPa의 압력으로 분사할 수 있습니다. 이동 속도는 시속 7.2km로 느린 편이지만, 목적을 생각하면 적당한 수준으로 보입니다. 내부에는 GPS 및 자율 주행 시스템을 갖춰 사람의 조작 없이도 이동이 가능합니다. 내부에 있는 소방 호스의 직경은 150mm 입니다. 


 폭발 가능성이 큰 화재 현장이나 유독 물질이 있어 사람의 접근이 어려운 장소에 요긴하게 쓰일 수 있을 것으로 기대됩니다. 각종 산업 시설 및 유류, 가스 저장 시설이 많은 국내에서도 관심을 가져야할 시스템이 아닐까 생각합니다. 



 참고 




파리지옥의 가시는 중간 크기 먹이를 잡기 위해 진화했다



(Credit: CC0 Public Domain)


 찰스 다윈은 식충식물인 파리지옥 (Venus Flytrap)의 가장자리 가시 구조가 적당한 크기의 곤충을 잡기위해 진화했다고 생각했습니다. 다윈을 이를 중간 크기 곤충의 끔찍한 감옥 ( 'Horrid Prison' for Moderate-Sized Insect Prey)이라고 묘사했습니다. 물론 너무 크거나 작은 경우 별 쓸모가 없겠지만, 중간 크기의 먹이를 놓치지 않는다면 선택압이 가시를 키우는 쪽으로 작용할 것이기 때문입니다. 


 시카고 대학의 알렉산더 L 데이비스 (Alexander L. Davis)를 비롯한 과학자들은 실험실 환경과 반자연 상태인 식물원에서 실제 파리지옥의 가시가 있는 상태와 없는 상태의 사냥 성공률을 조사했습니다. 그 결과 예상대로 중간 크기의 사냥감의 사냥 성공률을 90%까지 차이나게 만드는 것으로 나타났습니다. 생각하면 당연한 결과 같지만, 과학자라면 이를 직접 실험을 통해 엄밀히 검증할 필요가 있습니다. 


 연구팀은 34개의 파리지옥을 이용해서 식물원과 실험실에서 귀뚜라미 사냥 성공률과 크기의 관계를 연구했습니다. 가시를 제거한 경우와 그냥 둔 경우 역시 중간 크기 먹이에서 가장 큰 차이가 났으며 전체적으로 실험실에서 16.5%와 5.8%, 식물원에서 13.3%과 9.2%의 성공률을 보이는 것으로 나타났습니다. 


 흥미로운 사실은 일반적으로 생각하는 것과 달리 한 번 들어가면 빠져나오지 못하는 덫이 아니라 사실은 빠져나오는 경우가 더 흔한 덫이라는 점입니다. 이런 점은 아마도 성공 장면만 담은 다큐멘터리의 영향이 클 것 같습니다. 사실 성공과 실패가 적절히 조화를 이뤄야 포식자와 피식자가 같이 살아남는 구조라는 점을 생각하면 당연한 이야기일 것입니다. 사냥이 모두 성공하거나 실패하면 결국 한쪽이 사라질 수밖에 없겠죠. 


 참고 


Alexander L. Davis et al, Testing Darwin's Hypothesis about the Wonderful Venus Flytrap: Marginal Spikes Form a "Horrid Prison" for Moderate-Sized Insect Prey, The American Naturalist (2018). DOI: 10.1086/701433 



2019년 3월 29일 금요일

수천 킬로미터를 날아서 이동하는 박테리아



(Bacteria were collected from this hot spring in the El Tatio region in northern Chile. Credit: Yaroslav Ispolatov)


많은 박테리아들이 공기를 통해 전파됩니다. 이 사실은 많은 전염성 질환을 통해 쉽게 확인할 수 있습니다. 하지만 박테리아가 알마나 먼 거리를 공기를 타고 이동할 수 있는지는 잘 모릅니다. 상식적으로 생각할 때 중국발 황사나 미세먼지도 수천 킬로미터를 이동할 수 있는 것처럼 먼자보다 작은 박테리아 역시 수천 킬로미터를 이동할 수 있을 것입니다. 하지만 이를 검증하기는 어려웠습니다. 


 콘스탄틴 세베리노프 교수 (Konstantin Severinov, a principal investigator at the Waksman Institute of Microbiology and professor of molecular biology and biochemistry)를 비롯한 루트거 대학의 연구팀은 새로운 방법을 이용해 박테리아가 수천 킬로미터를 날아 이동할 수 있다는 air bridge 가설을 지지하는 증거를 발견했습니다.

 연구팀은 뜨거운 온천에서 사는 세균이 장거리를 이동할 수 있는지 검증했습니다. 새나 다른 동물, 그리고 사람이 세균을 대신 옮겨줄 수 없는 장소이기 때문입니다. 연구 대상은 Thermus thermophilus라는 호열성 세균인데, 이탈리아, 러시아, 칠레의 화산 지대 (Mount Vesuvius and hot springs on Mount Etna in Italy; hot springs in the El Tatio region in northern Chile and southern Chile's Termas del Flaco region; and hot springs in the Uzon caldera in Kamchatka, Russia)에서 세균을 수집해 DNA를 분석했습니다. 


 하지만 새균의 DNA의 유사성 만으로 지구 반대편까지 세균이 공기를 통해 날아갔다고 주정하기는 어려울 수 있습니다. 연구팀이 착안한 것은 박테리아에 감염되는 바이러스의 유전자였습니다. 바이러스 감염의 흔적인 CRISPR array는 바이러스 유전자가 변이가 매우 빠르기 때문에 같은 균주가 아니라면 일치하기 어렵습니다. 아무래도 토착 환경에 있는 바이러스 감염 기회가 더 많았을 테니까요. 


 이번 연구는 어떻게 항생제 내성이 인간이 살지 않는 오지까지 퍼질 수 있는지를 보여주고 있습니다. 공기를 타고 퍼진 항생제 내성균이 환경에 많아질수록 내성균 감염 위험도는 더 커질 수밖에 없습니다. 앞으로 이 전파 과정을 밝혀내는 것이 중요한 연구 과제가 될 것으로 생각합니다. 



 참고 


Anna Lopatina et al, Natural diversity of CRISPR spacers of Thermus : evidence of local spacer acquisition and global spacer exchange, Philosophical Transactions of the Royal Society B: Biological Sciences (2019). DOI: 10.1098/rstb.2018.0092 

고과당 옥수수 시럽이 대장암을 유발한다?



(Sugar-sweetened beverages (SSBs) containing a mixture of glucose (Glu) and fructose (Fru), flow through the gastrointestinal tract after consumption. Goncalves et al. show that Glu and Fru are directly absorbed by intestinal tumors, and daily dosing of SSBs accelerates tumor growth. This growth promoting effect is dependent on the enzyme, ketohexokinase (KHK), which produces fructose 1-phosphate (F1P) from Fru, and results in the depletion of adenosine triphosphate (ATP). Both of these metabolic changes promote the conversion of Glu to the building blocks needed for tumor growth. Credit: Vincent Dittmer)



 흔히 액상 과당으로 알려진 고과당 옥수수 시럽 (high-fructose corn syrup)은 가격이 저렴하고 순수한 설탕보다 더 달며 물과 쉽게 섞이기 때문에 콜라 같은 탄산 음료는 물론이고 다른 가당 음료나 가공 식품에 널리 들어가고 있습니다. 하지만 이로 인해 첨가당 섭취와 열량 섭취가 급격히 증가하면서 비만 유병률이 높아지고 당뇨, 고혈압, 대사 증후군은 물론 암 발생 위험도도 높아집니다. 이 내용은 제 책인 과학으로 먹는 3대 영양소에서 상세히 설명한 바 있습니다.


 고과당 옥수수 시럽을 포함한 첨가당의 주요 위험성은 비만과 연관이 깊다고 여겨집니다. 그런데 베일러 의과 대학 (Baylor College of Medicine)과 와일 코넬 메디슨 (Weill Cornell Medicine)의 과학자들이 동물 모델을 이용해서 비만 없이도 고과당 옥수수 시럽 자체가 종양 세포의 증식을 유발할 수 있다는 증거를 발견했습니다.


 과거 와일 코넬 메디슨에서 연구했던 바이엘 의대의 윤지혜 교수(Dr. Jihye Yun, assistant professor of molecular and human genetics at Baylor)와 그 동료들은 대장암을 예방하는 유전자인 APC 유전자를 제거해 종양이 쉽게 생성되게 유전자를 조작한 쥐를 모델로 고과당 옥수수 시럽을 먹였습니다. 쥐가 비만이 되지 않게 적절히 양을 조절한 후 종양 발생율을 조사한 결과 비만 없이도 대장암이 잘 생기고 종양이 빨리 자란다는 사실이 밝혀졌습니다. 


 연구팀은 그 이유에 대해서 알기 위해서 추가 실험을 진행했습니다. 과당과 포도당이 과량으로 흡수될 경우 남는 에너지는 지방 형태로 전환되게 됩니다. 이 지방은 종양이 자라는데 필요한 필수 영양소 가운데 하나이기 때문에 종양을 키우는데 중요한 역할을 할 수 있습니다. 과당 대사 및 지방 생성 과정을 억제한 동물 모델에서는 고과당 옥수수 시럽이 종양 성장을 자극하지 않는 것으로 나타나 지방 생성이 중요한 중간 과정임을 시사했습니다. 


 다만 이번 연구가 가공 식품이 아닌 천연적인 식품, 특히 과일에 들어있는 과당이 위험하다는 이야기는 아닐 것입니다. 이런 식품들은 오히려 예방에 도움이 된다고 알려져 있습니다. 순수하게 과당과 단순당만 들어있는 경우와 무기질, 식이섬유, 비타민을 포함해서 여러 영양소가 같이 들어있는 경우는 다를 테니까요. 종종 먹는 정도는 큰 문제가 되지 않겠지만, 가당 음료를 포함해 달달한 가공 식품을 많이 먹는 경우 다소 경각심을 지녀야 할 것 같습니다. 


 참고 


 M.D. Goncalves el al., "High-fructose corn syrup enhances intestinal tumor growth in mice," Science (2019). science.sciencemag.org/cgi/doi … 1126/science.aat8515




처음 보는 물건도 자유자재로 잡고 다룰 수 있는 로봇



(Called Keypoint Affordance Manipulation (KPAM), the researchers say the new control software can afford robots fair greater flexibility(Credit: MIT CSAIL))


(MIT researchers have developed a new robotic control technology that instead relies on a set of keypoints on an object, which it interprets as coordinates(Credit: MIT CSAIL))



 MIT의  컴퓨터 과학 및 인공지능 연구소 Computer Science and Artificial Intelligence Laboratory (CSAIL)의 연구팀이 이전에 한 번도 본적이나 학습한 적이 없는 물건을 다룰 수 있는 로봇을 개발했습니다. 이미 산업 현장에서 많은 로봇이 부품을 나르고 조립할 뿐 아니라 대규모 물류 센터에서 사람의 감독하에 물건을 나르지만, 대부분 사전에 입력한 명령을 반복해서 수행하는 것입니다. 


 최근에는 일일이 사람이 작업 내용을 지시하거나 프로그래밍 하는 대신 로봇이 스스로 학습하는 인공지능 관련 연구가 활발하지만, 학습을 시키는 과정이 만만치 않습니다. Russ Tedrake 교수가 이끄는 연구팀은 Keypoint Affordance Manipulation (KPAM)라는 새로운 알고리즘을 이용해서 이 문제를 극복했습니다. 




(동영상) 


 KPAM의 핵심은 이름처럼 사물의 키포인트를 찾아 로봇 손으로 잡고 중력의 영향을 감안해서 손상되지 않게 이동시키는 것입니다. 예를 들어 컵의 손잡이를 잡고 옮겨서 바로 세우거나 거는 것인데, 이전에 본적이 없는 물체를 식별하고 운반할 수 있다는 점이 가장 획기적인 부분입니다. 신발을 신발장에 넣거나 컵을 바로 세워 정리하는 등 인간에게는 쉬워도 로봇에게는 어려운 일이 가능해졌기 때문입니다. 


 물론 상용화까지는 멀었지만, 더 똑똑하고 유연한 로봇의 등장은 자동화 추세를 더 가속화할 것으로 예상됩니다. 


 참고 


2019년 3월 28일 목요일

태양계 이야기 741 - 목성이 과거 궤도를 이동했다?



(Credit: CC0 Public Domain)


과학자들은 다른 행성계에서 목성보다 큰 행성이 궤도를 이동했다는 증거를 발견했습니다. 모성에서 매우 가까운 궤도를 공전하는 뜨거운 목성형 행성의 경우 더 먼 궤도에서 이동한 것으로 생각됩니다. 그런데 태양계 초기에도 행성 간의 충돌은 물론 궤도 이동이 있었다는 증거들이 있습니다. 


 룬드 대학의 앤더스 요한슨 교수 (Anders Johansen, professor of astronomy at Lund University)를 비롯한 연구팀은 컴퓨터 시뮬레이션을 통해 목성이 생성 초기에는 지금보다  4배 정도 궤도에서 생성된 다음 지금의 궤도로 이동했다는 증거를 발견했습니다 결정적인 증거는 바로 목성의 트로이 소행성입니다.  


 목성의 라그랑주 점에는 수천 개의 소행성이 존재하는데 독특하게도 목성 진행 방향 앞에 있는 소행성의 숫자가 뒤에 있는 소행성보다 50% 정도 더 많습니다. 과학자들은 그 이유를 알지 못했는데 이번 연구에서 목성이 궤도 이동을 했다면 쉽게 설명될 수 있는 것으로 나타났습니다. 이 궤도 이동은 목성 형성 200-300만년이라는 매우 초기 단계에서 일어났으며 70만년에 걸쳐 이동한 것으로 추정됩니다. 


 보다 확실한 단서는 어쩌면 이 트로이 소행성에 숨어 있을지 모릅니다. 앞서 소개드린 루시 탐사선이 앞으로 트로이 소행성을 탐사하면 목성과 태양계 역사에 대한 결정적인 증거들이 나올 수 있을 것입니다. 




 참고 


 S. Pirani et al, Consequences of planetary migration on the minor bodies of the early solar system, Astronomy & Astrophysics (2019). DOI: 10.1051/0004-6361/201833713 




세계에서 가장 높은 목재 빌딩







(Preliminary construction work on Mjøstårnet began in April, 2017 and it officially opened on March 15(Credit: Voll Arkitekter AS))


 노르웨이에 세계 최고층 목재 빌딩이 들어섰습니다. 미에스토르네 (Mjøstårnet)는 높이 85.4m에 18층 높이로 건물 면적은 11,300 제곱미터에 달합니다. 목재 건물은 목재를 쉽게 구할 수 있는 서구 국가에서 드물지 않지만, 대부분 1-2층 목조 가옥인 경우가 많습니다. 하지만 목재 가공 기술의 발전과  더불어 건축 기술의 발달로 이제는 상당히 높은 목재 건물도 제작이 가능해진 것 같습니다. 참고로 이전에 가장 높은 목재 건물은 53m 높이 였다고 하네요. 




(동영상)


 건물을 짓는 과정을 보면 목재가 매우 크고 튼튼한데, 이렇게 큰 원목을 어떻게 구하는지 궁금할 수 있습니다. 그 비결은 집성교차목 (CLT, cross-laminated timber)에 있습니다. 나무를 교차로 엮어 만든 합판 구조로 바닥재 및 슬리브, 외벽 등 소재로 사용하며 기둥 부분은 글루람 (glulam ,glue laminated timber)이라는 역시 접착제로 붙여 만든 튼튼한 목재 소재를 사용한다고 하네요. (아래 영상 참조) 




(동영상 2)


 이런 목조 건물은 나무를 베야 하는 문제점이 있지만, 없어진 만큼 적절하게 나무를 심으면 이산화탄소 배출 문제를 해결할 수 있다는 장점이 있습니다. 무엇보다 소재 자체가 이산화탄소를 저장하는 것이기 때문에 대체 산림만 형성된다면 자원도 무한하고 온실가스 문제도 같이 해결할 수 있습니다. 앞으로 더 높은 목재 건물 건설도 가능하다고 하는데, 얼마나 커질 수 있을지 궁금합니다. 


 참고 








흰개미 탑 내부 순환 구조의 비밀을 밝히다



(Multi-scale 3D X-ray tomography of termite nests reveals the secrets of their architecture which plays a significant role in ventilation, thermal regulation and water drainage after rainy periods. Credit: Kamaljit Singh)


 흰개미 탑은 곤충이 만든 가장 놀라운 건축물 중 하나입니다. 흰개미의 크기를 생각하면 초대형 초고층 복합 건물인 흰개미탑은 별도의 에너지가 없어도 스스로 환기 및 냉방, 습도 조절까지 되는 놀라운 건축물입니다. 당연히 과학자들 역시 흰개미 탑의 작동 원리에 대해 많은 관심을 갖고 있습니다. 


 영국 임페리얼 칼리지 런던과 노팅햄 대학, 그리고 툴루즈 프랑스 과학원 (Imperial College London, the University of Nottingham, and CNRS-Toulouse)의 연구팀은 세네갈과 기니에서 고해상도 3D X선 이미징 기술을 이용해 흰개미 탑을 파괴하지 않고 그 내부 구조를 세밀하게 연구했습니다. 이 자료를 바탕으로 연구팀은 내부 공기 순환 구조 및 이산화탄소 배출 과정을 정교하게 시뮬레이션 했습니다. 


 그 결과 흰개미 탑 내부의 통로와 크고 작은 구멍들이 바람에 따라 효과적으로 이산화탄소를 배출하고 외부의 공기를 자연적으로 흡입한다는 사실이 밝혀졌습니다. 하지만 바람이 약할 때도 흰개미 탑 외벽의 큰 구멍과 내부 통로는 뜨거운 공기의 유입을 막고 내부 공기를 배출하도록 도왔습니다. 흥미로운 부분이 이 구멍이 비가 와서 물로 막히는 경우입니다. 


 통로에 이물질이 끼는 경우 흰개미가 처리하면 되지만, 아예 물로 막히는 경우에는 통로가 막히게 됩니다. 사실 비가 한 번 오며 이런 일이 자주 발생하지만, 흰개미 탑은 큰 구멍에 작은 구멍이 여러 개 연결된 구조로 모세관 현상에 따라 외벽을 막은 물방울을 천천히 흡수하게 되어 있는 구조입니다. 따라서 별도의 노력 없이도 물방울이 제거되어 통로가 유지됩니다. 


 놀라울 만큼 효과적이고 별도의 에너지를 쓰지 않는 흰개미 탑은 흰개미의 성공 요인 가운데 하나일 것입니다. 인간 역시 흰개미 탑을 흉내낸 건물을 짓기는 하지만, 아직 그 효율성에서는 감히 따라갈 수 없는 자연의 걸작 가운데 하나입니다. 


 참고 


K. Singh el al., "The architectural design of smart ventilation and drainage systems in termite nests," Science Advances (2019). advances.sciencemag.org/content/5/3/eaat8520 





2019년 3월 27일 수요일

R을 이용해 간단한 신경망 만들기 (16)





 점점 인공지능 관련 포스팅이 복잡해지고 있어서 간단한 신경망 만들기는 아마도 이번까지 하고 다음부터는 로지스틱 회귀 분석을 진행하면서 R을 이용한 딥러닝으로 해야 할 것 같습니다. 아무튼 H2O 패키지는 상업용 인공지능 툴 답게 여러 가지 기능을 제공하는데, 그 중 흥미로운 것 가운데 하나가 바로 AutoML 기능입니다. 


 앞서 살펴본 것과 같이 인공 신경망에는 여러 가지 옵션이 존재하며 이 옵션을 어떻게 조정하는지에 따라 다른 결과가 나오게 됩니다. 최적의 결과를 얻기 위해서는 여러 번의 시행 착오를 거쳐야만 하는데, 상당히 많은 시간과 노력을 소모하게 됩니다. 따라서 여러 가지 모델을 테스트하고 이를 비교해서 최적 모델을 찾는 과정도 자동화할 수 있는 기법이 개발되었습니다. H2O의 AutoML 이 바로 그런 기능으로 딥러닝은 물론 랜덤 포레스트나 GBMs (Gradient Boosting Machines), Stacked Ensemble 같은 인공 지능 기법을 이용한 모델을 제시합니다. H2O.ai 에서 제시한 예제를 살펴보겠습니다. 


#autoML

library(h2o)

localH2O = h2o.init()

# Import a sample binary outcome train/test set into H2O
train <- a="" class="con_link" h2o.importfile="" href="https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv" style="overflow-wrap: break-word; text-decoration-line: none;" target="_blank">https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv
")
test <- a="" class="con_link" h2o.importfile="" href="https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv" style="overflow-wrap: break-word; text-decoration-line: none;" target="_blank">https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv
")

# Identify predictors and response
y <- response="" span="">
x <- names="" setdiff="" span="" train="" y="">

# For binary classification, response should be a factor
train[,y] <- as.factor="" span="" train="" y="">
test[,y] <- as.factor="" span="" test="" y="">

# Run AutoML for 20 base models (limited to 1 hour max runtime by default)
aml <- h2o.automl="" x="x," y="y,</span">
                  training_frame = train,
                  max_models = 20,
                  seed = 1)

# View the AutoML Leaderboard
lb <- aml="" leaderboard="" span="">
print(lb, n = nrow(lb))  # Print all rows instead of default (6 rows)

# The leader model is stored here
aml@leader

# If you need to generate predictions on a test set, you can make
# predictions directly on the `"H2OAutoML"` object, or on the leader
# model object directly

pred <- also="" aml="" h2o.predict="" nbsp="" predict="" span="" test="" works="">

pred


 이 예제는 테스트에 상당한 시간이 걸립니다. 논리 CPU 8개를 할당해도 20분 이상 걸리니 참고하시기 바랍니다. 아무튼 아래와 같은 결과를 얻을 수 있습니다. 




> print(lb, n = nrow(lb))  # Print all rows instead of default (6 rows)
                                              model_id       auc   logloss mean_per_class_error      rmse       mse
1     StackedEnsemble_AllModels_AutoML_20190324_225820 0.7890978 0.5524149            0.3196844 0.4326267 0.1871658
2  StackedEnsemble_BestOfFamily_AutoML_20190324_225820 0.7854526 0.5561179            0.3255787 0.4343390 0.1886503
3                         GBM_5_AutoML_20190324_225820 0.7808367 0.5599029            0.3408479 0.4361915 0.1902630
4                         GBM_2_AutoML_20190324_225820 0.7800364 0.5598060            0.3399258 0.4364149 0.1904580
5                         GBM_1_AutoML_20190324_225820 0.7798268 0.5608570            0.3350957 0.4366159 0.1906335
6                         GBM_3_AutoML_20190324_225820 0.7786685 0.5617903            0.3255378 0.4371886 0.1911339
7            GBM_grid_1_AutoML_20190324_225820_model_4 0.7777929 0.6275684            0.3187812 0.4667522 0.2178576
8            GBM_grid_1_AutoML_20190324_225820_model_1 0.7772185 0.6008910            0.3227162 0.4535716 0.2057272
9                         GBM_4_AutoML_20190324_225820 0.7714230 0.5697120            0.3374203 0.4410703 0.1945430
10           GBM_grid_1_AutoML_20190324_225820_model_2 0.7698263 0.6070157            0.3072613 0.4566813 0.2085578
11                        DRF_1_AutoML_20190324_225820 0.7428924 0.5958832            0.3554027 0.4527742 0.2050045
12                        XRT_1_AutoML_20190324_225820 0.7420910 0.5993457            0.3565826 0.4531168 0.2053148
13  DeepLearning_grid_1_AutoML_20190324_225820_model_5 0.7351121 0.6072728            0.3589475 0.4570660 0.2089094
14           GBM_grid_1_AutoML_20190324_225820_model_3 0.7279124 0.6889933            0.3598375 0.4763117 0.2268729
15           GBM_grid_1_AutoML_20190324_225820_model_5 0.7167078 0.6865927            0.3871737 0.4967212 0.2467320
16               DeepLearning_1_AutoML_20190324_225820 0.7041353 0.6277710            0.3983563 0.4669145 0.2180092
17  DeepLearning_grid_1_AutoML_20190324_225820_model_1 0.6959598 0.7166216            0.3989566 0.4849767 0.2352024
18  DeepLearning_grid_1_AutoML_20190324_225820_model_4 0.6945008 0.7056079            0.4041671 0.4878114 0.2379600
19           GLM_grid_1_AutoML_20190324_225820_model_1 0.6826524 0.6385205            0.3972341 0.4726827 0.2234290
20  DeepLearning_grid_1_AutoML_20190324_225820_model_3 0.6807204 0.6708166            0.4045776 0.4810438 0.2314031
21  DeepLearning_grid_1_AutoML_20190324_225820_model_2 0.6801893 0.7273539            0.4073531 0.4926833 0.2427368


 이 결과를 보면 1번에 StackedEnsemble_AllModels_AutoML_20190324_225820 모델이 가장 좋은 결과를 얻었습니다. 아래에서 이 모델에 대한 더 상세한 정보가 나옵니다. 


> # The leader model is stored here
> aml@leader
Model Details:
==============

H2OBinomialModel: stackedensemble
Model ID:  StackedEnsemble_AllModels_AutoML_20190324_225820 
NULL


H2OBinomialMetrics: stackedensemble
** Reported on training data. **

MSE:  0.1049423
RMSE:  0.323948
LogLoss:  0.3599495
Mean Per-Class Error:  0.1240032
AUC:  0.9527414
pr_auc:  0.9548414
Gini:  0.9054828

Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
          0    1    Error         Rate
0      3906  799 0.169819    =799/4705
1       414 4881 0.078187    =414/5295
Totals 4320 5680 0.121300  =1213/10000

Maximum Metrics: Maximum metrics at their respective thresholds
                        metric threshold    value idx
1                       max f1  0.488791 0.889476 208
2                       max f2  0.369647 0.931987 253
3                 max f0point5  0.616275 0.897052 160
4                 max accuracy  0.517914 0.879400 197
5                max precision  0.948386 1.000000   0
6                   max recall  0.171604 1.000000 346
7              max specificity  0.948386 1.000000   0
8             max absolute_mcc  0.514976 0.757984 198
9   max min_per_class_accuracy  0.551951 0.877620 185
10 max mean_per_class_accuracy  0.536136 0.878565 190

Gains/Lift Table: Extract with `h2o.gainsLift(, )` or `h2o.gainsLift(, valid=, xval=)`

H2OBinomialMetrics: stackedensemble
** Reported on cross-validation data. **
** 5-fold cross-validation on training data (Metrics computed for combined holdout predictions) **

MSE:  0.1871658
RMSE:  0.4326267
LogLoss:  0.5524149
Mean Per-Class Error:  0.3196844
AUC:  0.7890978
pr_auc:  0.8047692
Gini:  0.5781957

Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
          0    1    Error         Rate
0      2301 2404 0.510946   =2404/4705
1       680 4615 0.128423    =680/5295
Totals 2981 7019 0.308400  =3084/10000

Maximum Metrics: Maximum metrics at their respective thresholds
                        metric threshold    value idx
1                       max f1  0.350203 0.749553 274
2                       max f2  0.179339 0.860131 348
3                 max f0point5  0.614417 0.738955 156
4                 max accuracy  0.518482 0.713400 198
5                max precision  0.948036 1.000000   0
6                   max recall  0.067843 1.000000 393
7              max specificity  0.948036 1.000000   0
8             max absolute_mcc  0.535747 0.425420 190
9   max min_per_class_accuracy  0.531468 0.712181 192
10 max mean_per_class_accuracy  0.535747 0.713052 190

Gains/Lift Table: Extract with `h2o.gainsLift(, )` or `h2o.gainsLift(, valid=, xval=)`


 이 베스트 모델은 aml@leader에 저장되어 있으며 다른 모델을 지정하는 방법은 h2o.getModel()을 통해 가능합니다. 모델을 저장하는 방법은 h2o.saveModel()를 사용합니다 .이 때 경로도 같이 정해주어야 합니다. 



# save the model
model_path <- force="TRUE)</span" h2o.savemodel="" object="model," path="getwd(),">


# load the model
saved_model <- h2o.loadmodel="" model_path="" span="">



 참고